gpt4 book ai didi

wpf - 从非 DependencyObject 读取附加属性

转载 作者:行者123 更新时间:2023-12-04 21:45:07 25 4
gpt4 key购买 nike

XAML 允许我将属性附加到不是从 DependencyObject 派生的类型。例如,我可以为窗口上的 CommandBindings 指定名称:

<Window.CommandBindings>
<CommandBinding x:Name="Refresh" Command="NavigationCommands.Refresh" />
<CommandBinding x:Name="Print" Command="ApplicationCommands.Print" />
</Window.CommandBindings>

我在 MSDN ( Attached Properties Overview ) 上发现了这种可能性,其中指出“如果您的类严格定义附加属性以用于其他类型,则该类不必从 DependencyObject 派生。但是如果您遵循将附加属性也作为依赖属性的整体 WPF 模型,则确实需要从 DependencyObject 派生。” - 但我不知道如何在代码中获取这些附加属性。

将上述 XAML 代码插入 <Window /> ,如何检索 x:Name 的值每个 CommandBinding 的属性?

最佳答案

你倒过来读:你不能将附加属性应用到非DependencyObject。但是,您可以在不是从 DependencyObject 派生的类上定义附加属性。通常是静态类,例如 WPF 中的 FocusManager

x:Name 不是附加属性:它是 directive 。在 FrameworkElement 的常见情况下,它与 FrameworkElement.Name 相同。对于自定义类,其目的是定义一个同名的字段(这应该是您的情况:您现在可以从代码中获得 RefreshPrint 字段-在后面)。在每种情况下(除了 ResourceDictionary 内部),它都会添加到当前的 XAML namescope 中。 .

您可以使用FindName在您的Window 上从其名称获取命令绑定(bind)。如果您确实需要从对象中获取名称,则可以使用以下代码来获取包含范围内每个命名元素的可枚举字典:

var dictionary = (INameScopeDictionary) NameScope.GetNameScope(yourWindow);

关于wpf - 从非 DependencyObject 读取附加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6483515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com