C# 触发自定义从属属性';初始化时的s PropertyChangedCallback

C# 触发自定义从属属性';初始化时的s PropertyChangedCallback,c#,wpf,dependency-properties,C#,Wpf,Dependency Properties,我正在实现一个布尔DependencyProperty,当DependencyObject设置为true时,它会向DependencyObject添加一个装饰器。我希望DependencyProperty的默认值为true,但这样做不会触发PropertyChangedCallback,因此默认情况下不会创建装饰器。有没有办法让PropertyChangedCallback在初始化时启动 public static bool GetIsAdorned(DependencyObject obj)

我正在实现一个布尔DependencyProperty,当DependencyObject设置为true时,它会向DependencyObject添加一个装饰器。我希望DependencyProperty的默认值为true,但这样做不会触发PropertyChangedCallback,因此默认情况下不会创建装饰器。有没有办法让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));
    }
}

除了支持值继承的附加属性外,没有自动应用于树中所有元素的默认值

除非显式设置了普通附加属性(无继承)的值,否则该属性的值不会应用于任何元素。当未在元素上显式设置属性时,获取附加属性的值将从元数据返回默认值

例如,如果画布中有一个元素没有设置
Canvas.Left
,画布将从元数据中将
Canvas.Left
的默认值设置为0。元素本身没有这个值


因此,在您的场景中,您无论如何都必须应用
IsAdorned
,因此默认值必须是
false

,请注意:创建注册表时,RegisterAttached中的ownerType参数必须是定义该属性的类,而不是要应用该属性的类(即,此处不是UIElement)。否则,您将无法在XAML中应用该属性。我一直对此感到好奇,因为文档中的示例没有显示DependencyProperty在其中定义的类,所以不清楚ownerType设置为什么。奇怪的是,如果我将ownerType参数设置为我希望属性应用到的类,我已经有了一些行为,但它没有给我任何问题,而且我能够在XAML中设置属性。我必须检查代码并修复它们。谢谢克莱门斯!