1.提供附加属性的类(自定义的类)
/// <summary> /// 用于附加属性的演示 /// </summary> public class MyAttachedProperty { // 获取附加属性 public static string GetSubTitle(DependencyObject obj) { return (string)obj.GetValue(SubTitleProperty); } // 设置附加属性 public static void SetSubTitle(DependencyObject obj, string value) { obj.SetValue(SubTitleProperty, value); } // 注册一个附加属性 public static readonly DependencyProperty SubTitleProperty = DependencyProperty.RegisterAttached( "SubTitle", // 附加属性的名称 typeof(string), // 附加属性的数据类型 typeof(MyAttachedProperty), // 附加属性所属的类 new PropertyMetadata("", PropertyMetadataCallback)); // 指定附加属性的默认值,以及值发生改变时所调用的方法 private static void PropertyMetadataCallback(DependencyObject sender, DependencyPropertyChangedEventArgs args) { object newValue = args.NewValue; // 发生改变之后的值 object oldValue = args.OldValue; // 发生改变之前的值 } }
2.使用附加属性
<Page x:Class="XamlDemo.Controls.Basic.AttachedPropertyDemo" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:XamlDemo.Controls.Basic" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:myControls="using:MyControls" mc:Ignorable="d"> <Grid Background="Transparent"> <StackPanel Margin="120 0 0 0"> <!-- 演示如何开发和使用自定义附加属性(本例所用到的自定义控件请参看:MyControls/MyControl.cs) --> <myControls:MyControl Background="Blue" BorderBrush="Yellow" BorderThickness="1" Width="100" HorizontalAlignment="Left" Title="{Binding Value, ElementName=slider}" myControls:MyAttachedProperty.SubTitle="{Binding Value, ElementName=slider}" /> //此处就使用附加属性 <Slider Name="slider" Width="100" Minimum="0" Maximum="200" IsThumbToolTipEnabled="False" HorizontalAlignment="Left" /> </StackPanel> </Grid> </Page>