为什么 属性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
的实例上设置依赖项 属性 就会调用回调,但仅限于那些实例,而不是任何对象,例如主窗口。
我有一个名为 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
的实例上设置依赖项 属性 就会调用回调,但仅限于那些实例,而不是任何对象,例如主窗口。