• 无废话WPF系列3: XAML中为对象属性赋值


    1. 使用标签的Attribute为对象属性赋值

    image

    我们可以按上面的方式用字符串来赋值,但是比如上面的Fill其实Shape.Fill类型,那为什么我么可以赋Red呢?因为WPF使用TypeConverter进行了转换.

    2. 使用TypeConverter类将XAML的Attribute与对象的Property进行转换

    image

    namespace DeepXAML
    {
        [TypeConverter(typeof(StringToPersonConverter))]
        public class Person
        {
            public string Name { get; set; }
            public Person Child { get; set; }
        }
    }
    namespace DeepXAML
    {
       public class StringToPersonConverter:TypeConverter
        {
           public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
           {
               if (value is string)
               {
                   Person p = new Person();
                   p.Name = value as string;
                   return p;
               }
               return base.ConvertFrom(context, culture, value);
           }
        }
    }
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            Person p = (Person)this.FindResource("Jack");
            MessageBox.Show(p.Child.Name);
        }
    }
     

    3. 标记扩展(Markup Extensions)

    标记扩展是一种特殊的Attribute=value语法,Value是由一对花括号及其括起来的内容组成,XAML编译器会对这样的内容做出解析,生成相应的对象。

    <Grid>
        <StackPanel>
        <Button x:Name="btnOk" Width="200" Height="100"  Click="Button_Click">OK</Button>
            <TextBox Text="{Binding ElementName=btnOk, Path=Width,Mode=OneWay}"  Width="200" Margin="10"  ></TextBox>
        </StackPanel>
    </Grid>

    标记扩展是可以嵌套,有一些简写,比如{Binding Value,…}与{Binding Path=Value,…}等价;前者是固定位置参数,后者制定参数名字,位置顺序可以变动;标记扩展类的类名以Extension为后缀,但XAML里可以省略这个后缀。

    4. 导入程序集和引用命名空间

    上面的图片已经可以演示出来。

    扫码关注公众号,了解更多管理,见识,育儿等内容

    作者: 王德水
    出处:http://www.cnblogs.com/cnblogsfans
    版权:本文版权归作者所有,转载需经作者同意。

  • 相关阅读:
    小程序:全局配置(pages、windows、tabBar)
    小程序:(创建项目、目录结构、页面的生命周期、路由)
    CSS:定位(定位的叠放次序、定位的特性)
    CSS:定位(静态、相对、绝对、固定、粘性)
    CSS:清除浮动(额外标签法、父级添加overflow、伪元素法、双伪元素法)
    CSS:浮动(左浮动、右浮动)
    验证码
    JFreeChart
    css:css3(圆角边框、盒子阴影、文字阴影)
    jvm:字节码执行流程
  • 原文地址:https://www.cnblogs.com/cnblogsfans/p/1958577.html
Copyright © 2020-2023  润新知