0

是否可以更改 WPF 属性的继承设置?理想情况下,我会在 Window 或 UserControl 级别设置 ToolTipService.ShowDelay,并且可视化树中的所有内容都将从那里继承。我知道这可以通过自定义依赖属性实现,但是使用默认属性?

4

1 回答 1

0

您不能直接执行此操作,因为您正在使用附加属性。使用普通的 DP,您可以覆盖特定(通常是派生的)类型上的元数据,但实际上并没有一个地方可以为附加属性执行此操作,因为元数据是在所有者(ToolTipService)上声明的,但它被用于其他所有类型引用该所有者,以及它最初声明的元数据。

您可以通过声明您自己的属性版本来模拟您想要的行为,然后使用它在该值的每个继承者上设置真实版本。这是属性声明:

    public static readonly DependencyProperty InitialShowDelayProperty = DependencyProperty.RegisterAttached(
        "InitialShowDelay",
        typeof(int),
        typeof(MyWindow),
        new FrameworkPropertyMetadata(0, FrameworkPropertyMetadataOptions.Inherits, InitialShowDelayPropertyChanged));

    public static int GetInitialShowDelay(DependencyObject target)
    {
        return (int)target.GetValue(InitialShowDelayProperty);
    }

    public static void SetInitialShowDelay(DependencyObject target, int value)
    {
        target.SetValue(InitialShowDelayProperty, value);
    }

    private static void InitialShowDelayPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        ToolTipService.SetInitialShowDelay(d, (int)e.NewValue);
    }

然后设置继承值只需设置您的新属性,它应该为所有孩子设置 ToolTipService 的真实属性:

local:MyWindow.InitialShowDelay="555"
于 2013-05-22T18:22:10.927 回答