如何在XAML中定义对现有对象的引用?

时间:2011-07-18 17:19:39

标签: c# .net wpf xaml

我想缩短设置绑定

{Binding Source={x:Static properties:Settings.Default}, Path=Password}

类似

{settingsBinding Password}

将声明的一部分移动到全局资源字典。但似乎我不能在这里声明绑定。任何想法如何解决这个问题?

我想至少让它像这样

{Binding Source={StaticResource Settings}, Path=Password}

所以我不必每次都包含属性名称空间。

2 个答案:

答案 0 :(得分:5)

要获得第一个语法,您必须从Binding派生并指定源:

public class SettingsBinding : Binding {
    public SettingsBinding(string path) : base(path) { Source = Settings.Default; }
    public SettingsBinding() { Source = Settings.Default; }
}

然后您可以使用:{xxx:SettingsBinding Password}。但是,您仍然需要指定此类的命名空间。我不会推荐这种方法:绑定往往非常冗长,但你知道发生了什么,因为语法总是一样的。

要获得所需的第二种语法,只需将x:Static定义为资源,例如:

<Window.Resources>
    <x:Static Member="properties:Settings.Default" x:Key="Settings" />
</Window.Resources>

您现在可以使用StaticResource引用它。

答案 1 :(得分:3)

首先让我说我是WPF的新手,我不知道你的专业水平如何,所以请原谅我,如果这不是你想要的。我无法确定您是想解决特定问题还是想要更一般地了解如何使用资源来存储源路径。我只能尝试前者的回答。

如果封闭对象的数据上下文设置为Properties.Settings.Default,那么您可以使用

{Binding Password}

这不是你提出的要求,但仍然很短。无论您身在何处,无论当前的数据环境如何,我都可以看到您可能希望如何访问密码字段。在我的代码中,我的所有XAML都有一个ViewModel数据上下文。所有视图模型都派生自ViewModelBase。在ViewModelBase中,您可以添加Password属性并仍使用上面显示的语法。