是的,它将作为正常财产运行。如果您需要特定控件的属性,即单个控件的一个属性,则可以仅使用依赖属性。它们将通过类的所有实例传递。但是如果你想在很多控件上使用这个属性,那么应该使用附加的依赖属性,它对某个命名空间内的所有成员都可用。属性,如:Canvas.Top、DockPanel.Dock 都附加了DependencyProperty。
附加依赖属性示例:
public class MyDependencyClass : DependencyObject
{
public static readonly DependencyProperty IsSelectedProperty;
public static void SetIsSelected(DependencyObject DepObject, Boolean value)
{
DepObject.SetValue(IsSelectedProperty, value);
}
public static Boolean GetIsSelected(DependencyObject DepObject)
{
return (Boolean)DepObject.GetValue(IsSelectedProperty);
}
private static bool IsSelectedValid(object Value)
{
if (Value.GetType() == typeof(bool))
{
return true;
}
else
{
return false;
}
}
static MyDependencyClass()
{
FrameworkPropertyMetadata MetaData = new FrameworkPropertyMetadata((Boolean)false);
IsSelectedProperty = DependencyProperty.RegisterAttached("IsSelected",
typeof(Boolean),
typeof(MyDependencyClass),
MetaData,
new ValidateValueCallback(IsSelectedValid));
}
}
它们还包含有用的回调,例如OnPropertyChangedCallback、ValidateValueCallback,它们可以放置在附加逻辑中。
这些属性在 XAML 中也可用。添加“本地”命名空间:
xmlns:local="clr-namespace:SampleApp"
为元素定义:
<Button Name="Button1" local:MyDependencyClass.IsSelected="True" />
<Button Name="Button2" local:MyDependencyClass.IsSelected="False" />
...
<ListBoxItem Name="Sample" local:MyDependencyClass.IsSelected="True" />
访问触发器中的属性:
<Trigger Property="local:MyDependencyClass.IsSelected" Value="True">
<Setter Property="Background" Value="Green" />
</Trigger>
在代码中使用附加的依赖属性:
if (CurrentButtonName == MyButton.Name)
{
MyDependencyClass.SetIsSelected(CurrentButton, true);
}
else
{
MyDependencyClass.SetIsSelected(CurrentButton, false);
}
有关详细信息,请参阅:http: //msdn.microsoft.com/en-us/library/ms749011.aspx