为什么 属性ChangedCallback 方法不从 Dependency 属性 OverrideMetadata 执行?

Why does PropertyChangedCallback method not execute from Dependency Property OverrideMetadata?

我有一个名为 CustomGrid 的 class,它派生自网格 class。当通过在 Window class 的 TitleProperty 上使用 OverrideMetadata 对网格的 parent window 的标题进行更改时,我正在尝试 运行 一种方法.然而,尽管我实现了另一个 PropertyChangedCallback 方法,但我解决这个问题的方法似乎不起作用,该方法对网格的 MarginProperty 使用相同的方法 (OverrideMetadata):

public class CustomGrid : Grid
{
    static CustomGrid()
    {
        Type ownerType = typeof(CustomGrid);
        MarginProperty.OverrideMetadata(ownerType, new FrameworkPropertyMetadata(new PropertyChangedCallback(OnMarginPropertyChanged)));

        Window.TitleProperty.OverrideMetadata(ownerType, new FrameworkPropertyMetadata(new PropertyChangedCallback(OnTitlePropertyChanged)));
    }

    private static void OnMarginPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        // This executes when the grid's margin changes.
    }

    private static void OnTitlePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        // This does not execute when the parent window's title changes.
    }
}

为什么在更改网格的parent window 标题时,OnTitlePropertyChanged 方法不执行?谢谢

未调用回调方法,因为您没有在 CustomGrid 实例上设置 Window.Title 属性。

表达式

Window.TitleProperty.OverrideMetadata(
    typeof(CustomGrid),
    new FrameworkPropertyMetadata(OnTitlePropertyChanged));

为类型 CustomGrid 注册 OnTitlePropertyChanged 回调。这意味着只要在 CustomGrid 的实例上设置依赖项 属性 就会调用回调,但仅限于那些实例,而不是任何对象,例如主窗口。