trueに設定すると、DependencyObjectにアドルナーを追加するboolean DependencyPropertyを実装しています。私はDependencyPropertyのデフォルト値をtrueにしたいが、PropertyChangedCallbackを起動しないので、デフォルトでadornerは作成されない。初期化時にPropertyChangedCallbackを呼び出す方法はありますか?カスタムDependencyPropertyのPropertyChangedCallbackを初期化で起動する
public static bool GetIsAdorned(DependencyObject obj)
{
return (bool)obj.GetValue(IsAdornedProperty);
}
public static void SetIsAdorned(DependencyObject obj, bool value)
{
obj.SetValue(IsAdornedProperty, value);
}
public static readonly DependencyProperty IsAdornedProperty =
DependencyProperty.RegisterAttached("IsAdorned",
typeof(bool),
typeof(UIElement),
new UIPropertyMetadata(true, OnIsAdornedChanged));
private static void OnIsAdornedChanged(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e)
{
var uiElement = dependencyObject as UIElement;
var newValue = (bool)e.NewValue;
var adornerLayer = AdornerLayer.GetAdornerLayer(uiElement);
if (newValue)
{
adornerLayer.Add(new MyAdorner(uiElement));
}
}
注:[カスタム添付プロパティ](http://msdn.microsoft.com/en-us/library/ms749011.aspx#custom)を作成する場合、RegisterAttachedの* ownerType *パラメータはクラスでなければなりませんそのプロパティを定義する**ではなく、プロパティを適用するクラスではありません(ここではUIElementではありません)。そうしないと、XAMLでプロパティを適用できなくなります。 – Clemens
ドキュメントの例でDependencyPropertyが定義されているクラスが表示されていないので、ownerTypeがどのように設定されているのかは不明でした。奇妙なことは、プロパティを適用したいクラスにownerTypeパラメータを設定しても何の問題もなく、XAMLでプロパティを設定できることです。私はコードを通過し、それらを修正する必要があります。おかげでクレメンス! –