附加属性的使用


附加属性

一、为什么需要定义附加属性:

  • 附加属性是一种依赖属性,与依赖属性不同的是,附加属性被应用的类不是定义附加属性的类。

  • 某个依赖属性本来不属于某个对象,但由于某种需求,该对象需要这个依赖属性,这时就需要将该依赖属性定义为附加属性。

二、创建附加属性的快捷方式:输入propa,再敲两次Tab键

三、不使用属性封装器:因为附加属性是可以被用于任何对象。

  • 通过调用两个静态方法分别包装SetValue()和GetValue(),这两个方法应当命名为SetPropertyName()和GetPropertyName()。
1 public static bool GetIsRotate(DependencyObject obj)
2 {
3     return (bool)obj.GetValue(IsRotateProperty);
4 }
5  
6 public static void SetIsRotate(DependencyObject obj, bool value)
7 {
8      obj.SetValue(IsRotateProperty, value);
9 }

四、附加属性的定义:

(1)利用快捷键生成的附加属性模板如下:需要使用RigisterAttached方法。

1 public static readonly DependencyProperty MyPropertyProperty =
2             DependencyProperty.RegisterAttached("MyProperty", typeof(int), typeof(ownerclass), new PropertyMetadata(0));

(2)注册附加属性的方式有多种,上述是最常用的一种。注册参数最多有五个:

1 public static DependencyProperty RegisterAttached(string name, Type propertyType, Type ownerType, PropertyMetadata defaultMetadata, ValidateValueCallback validateValueCallback);

(3)在模板基础上编辑自己的附加属性IsRotate:

1 public static readonly DependencyProperty IsRotateProperty =
2             DependencyProperty.RegisterAttached("IsRotate", typeof(bool), typeof(YMDemo), new PropertyMetadata(false));
  • 参数一(IsRotate):要注册的附加属性的名称。

  • 参数二(typeof(bool)):声明属性IsRotate的类型是bool。

  • 参数三(typeof(YMDemo)):依赖属性IsRotate的所有者类型,即定义该附加属性的类是YMDemo。

  • 参数四的类型是PropertyMetadata类:该类有5个重载的构造函数,参数最多是三个,示例中使用的是传参为DefaultValue的构造函数。

1 public PropertyMetadata(object defaultValue);
2 
3 public PropertyMetadata(object defaultValue, PropertyChangedCallback propertyChangedCallback, CoerceValueCallback coerceValueCallback);
  •  DefaultValue:附加属性未被显式赋值时,使用该默认值。

  •  PropertyChangedCallback:附加属性的值被改变之后,此委托会被调用,此委托可关联一个影响函数。

  •  CoerceValueCallback:附加属性值被强制改变时此委托会被调用,对赋值进行检查,强制对值进行赋值,返回值为Object类型,这个才是要赋给属性的值,此委托可关联一个影响函数。

五、属性value更改后,发生校正的流程:

六、依赖属性的使用

(1)在YMDemo.xaml.cs中定义附加属性IsRotate;

(2)在MainWindow.xaml中如果想要Grid控件使用IsRotate属性:

<Window x:Class="DependencyPropertyDemo.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:DependencyPropertyDemo"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
<Grid local:YMDemo.IsRotate="True"/> </Window>

总结:给任何需要的控件(类)提供该属性的使用入口。

文章来源:https://www.cnblogs.com/LXLR/p/15642635.html

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
上一篇:LeetCode:旋转图像
下一篇:.Net Core——用SignalR撸个游戏
评论列表

发表评论

评论内容
昵称:
关联文章

附加属性使用
依赖属性使用
必须使用适当属性或方法修改referer标头
css样式首行缩进2个长度宽度 text-indent 属性
CSS cursor 属性
WPF 引用第三方库控件在设计器加上设计时数据和属性
WPF 双向绑定到非公开 set 方法属性在 NET 45 和 NET Core 行为不同
如何更改winform中GroupboxControls属性内控件排序
vue自定义组件props中设置object属性默认值:
Quartz在.NET中使用
Devexpress使用自带图标库图标
c# Quartzs定时器简单使用
C# CefSharp使用
FastReport Table使用
使用 WPF 做个 PowerPoint 系列 文本 BodyProperties FontScale 与文本字号缩放
开源组件:DockPanelSuite(WeifenLuo.WinFormsUI.Docking)Visual Studio风格用户界面 使用
在Winform项目和Web API.NetCore项目中使用Serilog 来记录日志信息
使用.NET 6开发TodoList应用(24)——实现基于JWTIdentity功能
.net core设置返回json属性名(驼峰或保留大小写)配置方式
C# 指针简单使用

联系我们
联系电话:15090125178(微信同号)
电子邮箱:garson_zhang@163.com
站长微信二维码
微信二维码