附加依赖属性是WPF中使用频率较高的一种技术,可以用于从外部控制控件样式等外观相关内容。先将WPF中的依赖属性及其结构回顾一下。
依赖属性的类型全部都是静态成员 DependencyProperty
,包含了名称、数据类型、属性所有者等信息。每个依赖属性还有一个名称以“XXXProperty
”形式命名的静态实例,相当于依赖属性的标识符,用于设置、读取此属性值。
附加依赖属性可以附加到除了依赖属性所有者以外的对象上,并且只要提供给属性一个名字,这个属性就能够像对象上的普通属性那样被访问和使用。在XAML文件中,可以使用命名空间来引用包含了自定义的依赖属性的类。
一、创建依赖属性
在WPF应用程序中创建自定义依赖属性的步骤:
- 创建和注册
DependencyProperty
- 创建附加属性的
Get
和Set
方法 - 在控件中应用附加属性
1. 创建和注册 DependencyProperty
public static readonly DependencyProperty MyDependencyProperty =
DependencyProperty.RegisterAttached(
"MyDependency",
typeof(string),
typeof(MainWindow),
new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsArrange));
上面的代码中,我们创建了一个名为MyDependency
的附加依赖属性,其数据类型为string
,拥有者typeof(MainWindow)
表示此属性是MainWindow类型的附加依赖属性。
FrameworkPropertyMetadataOptions.AffectsMeasure
和FrameworkPropertyMetadataOptions.AffectsArrange
表示当属性值变更时,会影响大小和排列。
2. 创建附加属性的 Get 和 Set 方法
public static string GetMyDependency(DependencyObject obj)
{
return (string)obj.GetValue(MyDependencyProperty);
}
public static void SetMyDependency(DependencyObject obj, string value)
{
obj.SetValue(MyDependencyProperty, value);
}
这里分别创建了Get
和Set
方法,用于获取属性值和设置属性值,都是静态方法,上面的语法GetValue
和SetValue
是依赖属性的两个方法,用于获取和设置属性值。
3. 在控件中应用附加属性
在XAML文件中,可以使用命名空间来引用包含了自定义的依赖属性的类,语法如下:
xmlns:local="clr-namespace:WpfApplication1"
<Button local:MainWindow.MyDependency="测试依赖属性" Content="测试附加依赖属性"/>
其中,xmlns:local="clr-namespace:WpfApplication1"
表示定义一个名为“inlcude”的命名空间,将 local
映射到 WpfApplication1
命名空间。
local:MainWindow.MyDependency="测试依赖属性"
表示将 MyDependency
属性值在 MainWindow
类型上应用到某个控件上。
二、应用依赖属性
我们通过一个例子来说明如何应用依赖属性。
- 创建一个自定义控件
CustomLabel
public class CustomLabel : Label
{
public static readonly DependencyProperty MyDependencyProperty =
DependencyProperty.RegisterAttached(
"MyDependency",
typeof(string),
typeof(CustomLabel),
new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsMeasure | FrameworkPropertyMetadataOptions.AffectsArrange));
public static string GetMyDependency(DependencyObject obj)
{
return (string)obj.GetValue(MyDependencyProperty);
}
public static void SetMyDependency(DependencyObject obj, string value)
{
obj.SetValue(MyDependencyProperty, value);
}
}
- 在XAML文件中应用附加属性
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication1"
Title="MainWindow" Height="350" Width="525">
<Grid>
<StackPanel>
<local:CustomLabel local:CustomLabel.MyDependency="测试附加依赖属性" Content="附加依赖属性演示"/>
</StackPanel>
</Grid>
</Window>
在 CustomLabel
控件上使用 MyDependency
属性,其中 local:CustomLabel.MyDependency="测试附加依赖属性"
表示将 MyDependency
属性在 CustomLabel
类型上应用到控件上。控件的内容“附加依赖属性演示”将会显示出来。
使用依赖属性确实能让你在开发WPF程序时更容易,也提高了你的UI最大程度的灵活性。掌握它经验是非常有用的。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c# wpf如何附加依赖项属性 - Python技术站