1
我正在實現一個布爾型DependencyProperty,它在設置爲true時將一個裝飾器添加到DependencyObject。我希望DependencyProperty的默認值爲true,但這樣做不會觸發PropertyChangedCallback,因此默認情況下不會創建裝飾器。有沒有辦法讓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 2012-04-23 15:49:19
我一直很好奇,因爲文檔中的示例沒有顯示DependencyProperty定義的類,所以不清楚ownerType的設置是什麼。奇怪的是,我已經有一些行爲,我將ownerType參數設置爲我希望屬性應用到的類,並且它沒有給我任何問題,我可以在XAML中設置屬性。我將不得不通過代碼並修復這些代碼。謝謝克萊門斯! – 2012-04-23 16:03:11