WPF_02

2 篇文章 0 订阅

给XAML对象赋值的三种方式

1. 第一种:通过在标签中Attribute:value
. 下图中框起来的就是使用了这种方式,当然,这也是我们最常见的一种方式,操作简单。Title="MainWindow"表示另窗体的标题显示设置为MainWindow,Height,Width俩属性设置窗体的高度和宽度,和HTML很像哦。
说几个常用的属性:
Height:高度
Width:宽度
Backgroung:设置背景色
WindowStartupLocation:窗体程序启动时在屏幕的显示位置,有三个参数,一般我们都会使用CenterScreen这个参数吧,表示显示在屏幕正中央。
属性巨多,就不列举了
在这里插入图片描述
当然这种方式给简单属性赋值比较方便,但是复杂属性就比较麻烦了,需要记住书写方式。
在这里插入图片描述
如上图,我们使用Path标签画了一个黄色的矩形。Stroke属性表示画笔的颜色,这里是黑色,Fill属性表示该图形的填充颜色,Data属性是个很长的值。可将该值分为五段:

M 10,10    表示画笔起点坐标为(10,10),M表示起始点
L 10,60    表示从前一个点(也就是起点)画一条直线到坐标(10,60)
L 60,60    表示从前一个点(10,60)画一条直线到坐标(60,60)
L 60,10    表示从前一个点(60,60)画一条直线到坐标(60,10)
Z          表示结束了,将最后一点与起始点连接起来,组成一个图形

通过标签给属性赋值:但是我们发现Attribute:value的赋值方式,value始终都是一个字符串,但在实际情况中,如下:

<Path Stroke="Black" Fill="Yellow" Data="M 10,10 L 10,60 L 60,60 L 60,10 Z"/>

其中,Stroke与Fill为Brush类型

public Brush Stroke { get; set; }

Data为Geometry类型

public Geometry Data { get; set; }

那么程序中如何将我们赋的值成功转换为程序需要的值类型,下面举个例子来说明:

在程序中写出这个类:

public class Person
    {
        public string Name { get; set; }
        public Person MyChild { get; set; }
    }

该Person是我自己写的,但作为该程序的一个资源,还需要手动添加到我的程序中。
首先引入本地命名空间(我使用的VS2017,在新建项目的时候给我自动添加了,别的版本不知):
命名为local(最好命名成local)

xmlns:local="clr-namespace:HelloWPF"

然后加入Window资源节点
在这里插入图片描述
Person:表示我建的Person对象
Key:键,等于一个标识吧
Name:我的Person对象中的Name属性,并赋值为“哈哈哈one”
窗口和按钮画好,
在这里插入图片描述
添加按钮点击事件
在这里插入图片描述
运行演示
在这里插入图片描述
在这里插入图片描述
以上的比较好理解,下面我们对Peron对象的MyChild属性赋值

<Window.Resources>
        <local:Person x:Key="person" Name="哈哈哈one" MyChild="我是Son"/>
    </Window.Resources>

注意:MyChild属性可是Person类型的,不是string。
而我们给它赋值为字符串“我是Son”,那么代码如何实现类型转换呢?
首先新建一个类,重写俩方法:
上代码:

public class MyMethod : TypeConverter
    {
        //重写ConvertFrom方法
        public override object ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, object value)
        {
            string name = value.ToString();
            Person person = new Person();
            person.Name = name;
            return person;
        }

        //重写CanConvertFrom方法,返回值必须为true。
        //意思是:返回该转换器是否可以将给定类型的对象转换为此转换器的类型。 
        //设定返回值为true,否则,在xaml代码中无法将会提示MyChild无法转化
        public override bool CanConvertFrom(ITypeDescriptorContext context, Type sourceType)
        {
            return true;
        }
    }

给Person类打标签[TypeConverterAttribute(typeof(MyMethod))],意为该类是需要转换的类。

//通过将指定类型用作该属性所绑定到的对象的数据转换器,
    //初始化 TypeConverterAttribute 类的新实例。
    //简单点就是Person对象使用我自己定义的MyMethod
    [TypeConverterAttribute(typeof(MyMethod))]
    public class Person
    {
        public string Name { get; set; }
        public Person MyChild { get; set; }
    }

改一下button的点击事件

private void Button_Click(object sender, RoutedEventArgs e)
        {
            Person person = FindResource("person") as Person;
            if (person != null)
            {
                MessageBox.Show(person.MyChild.Name);
            }
        }

运行演示
在这里插入图片描述
在这里插入图片描述
今天结束!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值