WPF属性

开发工具与关键技术:XALM WPF C#
作者:李寿宇
撰写时间:2019/4/30
在WPF中属性分为两种:
一、 依赖属性:
1.1. 什么是依赖属性
依赖属性就是一种自己可以没有值,并且可以通过绑定从其他数据源获取值。依赖属性可支持WPF中的样式设置、数据绑定、继承、动画及默认值将所有的属性都设置为依赖属性并不 总是正确的解决方案,具体取决于其应用场景。有时,使用私有字段实现属性的典型方法便能满足要求。

  1. 希望可在样式中设置属性。
  2. 希望属性支持数据绑定。
  3. 希望可使用动态资源引用设置属性。
  4. 希望从元素树中的父元素自动继承属性值。
  5. 希望属性可进行动画处理。
  6. 希望属性系统在属性系统、环境或用户执行的操作或者读取并使用样式更改了属性以前的值时报告。
  7. 希望使用已建立的、WPF 进程也使用的元数据约定,例如报告更改属性值时是否要求布局系统重新编写元素的可视化对象。

二、 依赖属性的特点
无论什么时候,只要依赖属性的值发生改变,wpf就会自动根据属性的元数据触发一系列的动作,这些动作可以重新呈现UI元素,也可以更新当前的布局,刷新数据绑定等等,这种变更的通知最有趣的特点之一就是属性触发器,它可以在属性值改变的时候,执行一系列自定义的动作,而不需要更改任何其他的代码来实现。通过下面的示例来演示属性变更通知
三、 使用依赖属性实现,XAML界面代码:


    
     
 

使用上面XAML界面代码实现Button按钮的前景色改变,效果如下:
WPF属性_第1张图片二、 附加属性
2.1附加属性的特点
1、特殊的依赖属性
2、用于非定义该属性的类 例如Grid面板的RowDefinition、ColumnDefinition、 Canvas面板的Left、Right
DockPanel面板的Dock都是附加属性。
二、附加属性的定义
1、声明数据属性变量。 public static 的DependencyProperty类型的变量。
2、在属性系统中进行注册,使用DependencyProperty.RegisterAttached()方法来注册,方法参数和注册依赖属性时Register()方法的参数一致。
3、调用静态方法设置和获取属性值。通过调用DependencyObject的SetValue()和GetValue()方法来设置和获取属性的值。
两个方法应该命名为SetPropertyName()方法和GetPropertyName()方法。
2.1示例演示附加属性
实现的功能,窗体字体的大小随TextBox控件里面输入的值的大小而改变。
1、新建WPF版的用户控件,命名为“MyDependencyProperty”,在用户控件里面添加TextBox和TextBlock控件
XAML代码:


    
        
            
            通过附加属性修改FontSize的大小
        
    

设计界面:
WPF属性_第2张图片2、、在MyDependencyProperty.xaml.cs文件里面添加附件属性,附件属性的名称为MyAttachedFontSize,使用快捷方式创建附件属性:输入propa,连续按两下Tab健。

 public static int GetMyAttachedFontSize(DependencyObject obj)
            {
                return (int)obj.GetValue(MyAttachedFontSizeProperty);
            }
            public static void SetMyAttachedFontSize(DependencyObject obj, int value)
            {
                obj.SetValue(MyAttachedFontSizeProperty, value);
            }
            public static readonly DependencyProperty MyAttachedFontSizeProperty =
                DependencyProperty.RegisterAttached("MyAttachedFontSize", typeof(int), typeof(MyDependencyProperty),
                new PropertyMetadata((s, e) =>
                {
                    var mdp = (((s as FrameworkElement).Parent as FrameworkElement).Parent
                        as FrameworkElement).Parent as MyDependencyProperty;
                    //更改用户控件的FontSize的值
                    if (mdp != null && e.NewValue != null)
                    {
                        var fontsize = 9;
                        int.TryParse(e.NewValue.ToString(), out fontsize);
                        mdp.FontSize = fontsize;
                    }
                }));

以上是本人在上课中做的一记…….

你可能感兴趣的:(WPF,笔记)