zoukankan      html  css  js  c++  java
  • XAML中为对象属性赋值

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

    image

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

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

    image

    1 namespace DeepXAML
    2 {
    3     [TypeConverter(typeof(StringToPersonConverter))]
    4     public class Person
    5     {
    6         public string Name { get; set; }
    7         public Person Child { get; set; }
    8     }
    9 }
    01 namespace DeepXAML
    02 {
    03    public class StringToPersonConverter:TypeConverter
    04     {
    05        public override object ConvertFrom(ITypeDescriptorContext context, System.Globalization.CultureInfo culture, object value)
    06        {
    07            if (value is string)
    08            {
    09                Person p = new Person();
    10                p.Name = value as string;
    11                return p;
    12            }
    13            return base.ConvertFrom(context, culture, value);
    14        }
    15     }
    16 }
    01 public partial class MainWindow : Window
    02 {
    03     public MainWindow()
    04     {
    05         InitializeComponent();
    06     }
    07   
    08     private void Button_Click(object sender, RoutedEventArgs e)
    09     {
    10         Person p = (Person)this.FindResource("Jack");
    11         MessageBox.Show(p.Child.Name);
    12     }
    13 }

    3. 标记扩展(Markup Extensions)

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

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

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

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

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

  • 相关阅读:
    Hessain 方法重载
    mac 类似Xshell
    idea & datagrip 注册码
    mac 安装mysql 修改密码
    securecrt 的安装
    datagrip的使用
    mac 安装oracle
    mac 安装mysql
    destoon 会员整合Ucenter/Discuz!/PHPWind教程
    destoon 深度整合discuz x2 UC 之免邮箱二次验证
  • 原文地址:https://www.cnblogs.com/luluping/p/2039456.html
Copyright © 2011-2022 走看看