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?
你向后看它:你不能将附属物申请给非DependencyObject.但是,您可以在不派生的类上定义附加属性DependencyObject.通常是一个静态类,就像FocusManager在WPF中一样.
x:Name不是附属财产:它是一个指令.在a的常见情况下FrameworkElement,它与...相同FrameworkElement.Name.在自定义类的情况下,其目的是定义同名的字段(这应该是你的情况:你现在Refresh和Print可以从代码隐藏字段).在每种情况下(除了a之外ResourceDictionary),它都被添加到当前的XAML名称范围中.
您可以使用FindName您Window得到一个命令从它的名字绑定.如果您确实需要从对象中获取名称,则可以使用以下代码来获取包含范围中每个命名元素的可枚举字典:
var dictionary = (INameScopeDictionary) NameScope.GetNameScope(yourWindow);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1360 次 |
| 最近记录: |