zoukankan      html  css  js  c++  java
  • XAML语法学习之...

    决定深入学习下XAML,现在感觉所学的东西都是很零散,没有自己的东西

    使用Attribute=Value语法赋值,由于XAML的语法限制,Value只可能是一个字符串。这就引出2个问题

    • 如果一个类能使用XAML语言进行申明,并允许它的Property与XAML标签的Attribute互相映射,那就需要为这些Property准备适当的转换机制
    • 由于Value是一个字符串,所以其格式复杂程度有限,尽管可以再转换机制里包含一定的按格式解析字符串的功能,但这会让最终的XAML使用者头疼不已。因为他们不得不在没有编码辅助的情况下手写一个格式复杂的字符串以满足赋值要求。

    第一个问题的解决方案是使用TypeConverter类的派生类,在派生类重写TypeConverter的一些方法,第二个问题的解决方案就是使用属性元素。

    首先我们准备了一个类

    public class Human
        {
            public string Name { get; set; }
            public Human Child { get; set; }
        }

    现在我们的期望是在XAML中这样写

    <Window.Resources>
            <local:Human x:Key="human" Child="ABC"></local:Human>
        </Window.Resources>

    就能得到child对象,并且Name=“ABC”,加个按钮将其结果显示出来,运行,发现错误。程序根本不知道如何把ABC付给一个新的Human。

    那我们应该怎么做?办法是使用TypeConverter。

    首先得从TypeConveter派生自己的类,需要引用程序集System.ComponentModel;

    class StringToHumanTypeConverter : TypeConverter
        {
            public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
            {
                if (value is string)
                {
                    Human h = new Human();
                    h.Name = value as string;
                    return h;
                }
                return base.ConvertFrom(context, culture, value);
            }
        }

    然后再把该特征引用到Human类上

    [TypeConverter(typeof(StringToHumanTypeConverter))]
        public class Human
        {
            public string Name { get; set; }
            public Human Child { get; set; }
        }

    Ok,程序运行没有问题。

  • 相关阅读:
    vba根据部门分别汇总不同部门下的人员不同培训内容的时长总计,多条件求和
    vb 案例学习
    bat批处理如何删除本地策略里的用户权限分配中的拒绝从网络访问本机项的guest用户?
    vb,wps,excel 提取括号的数字
    vb,wps,excel 分裂
    vba,excel,网址提取名字与链接url
    母亲节到了 ,送什么礼物好,按键音乐提示,键盘测试,新手电脑
    MySql 数据表从1开始计数
    关于缓存的几点问题
    订单路由定时任务
  • 原文地址:https://www.cnblogs.com/HelloMyWorld/p/2890848.html
Copyright © 2011-2022 走看看