はい、通常のプロパティとして動作します。特定のコントロールのプロパティ、つまり単一のコントロールの 1 つのプロパティが必要な場合は、依存関係プロパティのみを使用できます。それらは、クラスのすべてのインスタンスを通過します。ただし、多くのコントロールでプロパティが必要な場合は、添付された依存関係プロパティを使用する必要があります。これは、特定の名前空間内のすべてのメンバーが利用できます。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を参照してください。