从非DependencyObject读取附加属性

Cyg*_*gon 2 wpf dependency-properties attached-properties

XAML允许我将属性附加到不是从DependencyObject派生的类型.例如,我可以在Window上为CommandBindings命名:

<Window.CommandBindings>
  <CommandBinding x:Name="Refresh" Command="NavigationCommands.Refresh" />
  <CommandBinding x:Name="Print" Command="ApplicationCommands.Print" />
</Window.CommandBindings>
Run Code Online (Sandbox Code Playgroud)

我在MSDN(附加属性概述)中发现了这种可能性,它指出" 如果你的类严格定义附加属性以便在其他类型上使用,那么该类不必从DependencyObject派生.但你需要派生自DependencyObject如果你遵循整个WPF模型,你的附加属性也是一个依赖属性. " - 但我不知道如何在代码中获取这些附加属性.

鉴于上面插入的XAML代码<Window />,如何x:Name从每个代码中检索属性的值CommandBinding

Jul*_*ain 6

你向后看它:你不能将附属物申请给非DependencyObject.但是,您可以在不派生的类上定义附加属性DependencyObject.通常是一个静态类,就像FocusManager在WPF中一样.

x:Name不是附属财产:它是一个指令.在a的常见情况下FrameworkElement,它与...相同FrameworkElement.Name.在自定义类的情况下,其目的是定义同名的字段(这应该是你的情况:你现在RefreshPrint可以从代码隐藏字段).在每种情况下(除了a之外ResourceDictionary),它都被添加到当前的XAML名称范围中.

您可以使用FindNameWindow得到一个命令从它的名字绑定.如果您确实需要从对象中获取名称,则可以使用以下代码来获取包含范围中每个命名元素的可枚举字典:

var dictionary = (INameScopeDictionary) NameScope.GetNameScope(yourWindow);
Run Code Online (Sandbox Code Playgroud)