0405对象资源
添加引入命名空间System
xmlns:sys="clr-namespace:System.Runtime;assembly=mscorlib"
去掉.Runtime
xmlns:sys="clr-namespace:System;assembly=mscorlib"
1、变量
<Window.Resources>
<sys:Double x:Key="value">200</sys:Double>
</Window.Resources>
使用
Width="{StaticResource value}" Height="{StaticResource value}"
2、数组
<Window.Resources> <x:Array x:Key="datas" Type="sys:Int32"> <sys:Int32>1</sys:Int32> <sys:Int32>2</sys:Int32> <sys:Int32>3</sys:Int32> <sys:Int32>4</sys:Int32> <sys:Int32>5</sys:Int32> </x:Array> </Window.Resources>
调用
<DataGrid ItemsSource="{StaticResource datas}"> <DataGrid.Columns> <DataGridTextColumn Header="ID" Binding="{Binding}"/> </DataGrid.Columns> </DataGrid>
C#内的所有对象都可以在资源中定义,
特殊:没有无参数构造函数,不能在xmal里面定义传值
表现已经实例化了<sys:Int32>
必须有个无参数构造函数
3、自定义对象
1、引入命名空间
xmlns:model="clr-namespace:WpfApp1.Model"
2、<model:MyValueModel x:Key="my"/>
自定义构造函数,没有无参数构造函数
namespace WpfApp1.Model { class MyValueModel { public MyValueModel(int x) { } public string Value { get; set; } public int MyProperty { get; set; } } }
Xmal就会报错

必须有无参数构造函数

页面赋值
<model:MyValueModel x:Key="my" MyProperty="123" Value="tom"/>
后台就可以接收值,类型转换器,输入字符串给int类型就会报错
实际项目也不会用
实际希望通过代码进行控制,动态处理
4、局部变量
Window里面定义的是整个页面可以访问的
每个控件自己都有一个属性Resources,就可以定义自己的内部变量,类型类中的方法定义自己的变量
<Border.Resources>
<sys:Double x:Key="value">200</sys:Double>
</Border.Resources>
Resources转到定义来源FrameworkElement
所有要用到的对象基本都是继承自FrameworkElement
定义同名
会涉及到资源引用顺序的问题
会先从本身的资源开始查找,向上查找
页面加载顺序类似html,自上而下开始加载
要想使用自己内部定义的变量,变量要放在使用之前

浙公网安备 33010602011771号