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,自上而下开始加载

要想使用自己内部定义的变量,变量要放在使用之前

 

posted on 2025-04-04 16:20  张彦山  阅读(13)  评论(0)    收藏  举报