zoukankan      html  css  js  c++  java
  • WPF--TypeConverter使用

    转载至http://www.cnblogs.com/DoNetCoder/p/4374981.html

    所谓TypeConverter就是类型转换器,支持两种类型之间相互转换

    你可以重写转换逻辑,只要你清楚转换的协议,就可以实现类型互转。

    定义一个Person类型,具有一个int类型的Age属性:

    复制代码
    public class Person
        {
            public int Age
            {
                get;
                set;
            }
        }
    复制代码

    在XAML中添加一个Person的资源:

        <Window.Resources>
            <local:Person x:Key="person"></local:Person>
        </Window.Resources>

    本来可以像这样初始化一个Person对象:

        <Window.Resources>
            <local:Person x:Key="person" Age="123"></local:Person>
        </Window.Resources>

    但是现在由于要引入TypeConverter,假设我想像下面这样初始化Person对象怎么办:

        <Window.Resources>
            <local:Person x:Key="person">123</local:Person>
        </Window.Resources>

    这就要用到TypeConverter,首先我们定义自己的Converter,继承自TypeConverter,然后重写TypeConverter的转换逻辑:

    复制代码
        public class StringToPersonConverter:TypeConverter
        {
            /// <summary>
            /// 从String转换为Person
            /// </summary>
            /// <param name="context"></param>
            /// <param name="culture"></param>
            /// <param name="value"></param>
            /// <returns></returns>
            public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
            {
                int age;
                if (int.TryParse(value.ToString(), out age))
                {
                    return new Person
                    {
                        Age = age
                    };
                }
    
                return null;
            }
        }
    复制代码

    然后给Person类加上TypeConverter特性,让编译器知道当无法通过正常的方式初始化Person时,可以找StringToPersonConverter寻求帮助:

    复制代码
        [TypeConverter(typeof(StringToPersonConverter))]
        public class Person
        {
            public int Age
            {
                get;
                set;
            }
        }
    复制代码
  • 相关阅读:
    LeetCode 55. 跳跃游戏(Jump Game)I II tag 数组 贪心 动态规划
    科学的意义
    umi前后端交互技术,通用型request配置
    TD demo在我们机器上
    Ubuntu挂载和登录服务器
    TD属性总结
    TD音乐界面添加keyboard的流程
    VS Code常用键
    TD打印 log方法
    TD自定义控件流程
  • 原文地址:https://www.cnblogs.com/wlwenjie/p/4543642.html
Copyright © 2011-2022 走看看