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

标签 c# .net wpf xaml

我想缩短设置绑定(bind)

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

类似的东西

{settingsBinding Password}

通过将声明的一部分移动到全局资源字典。但似乎我不能在这里声明绑定(bind)。有什么想法可以实现吗?

我至少要做到这样

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

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

最佳答案

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

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

然后您可以使用:{xxx:SettingsBinding Password}。但是,您仍然必须指定此类的 namespace 。不过我不推荐这种方法:绑定(bind)往往非常冗长,但你知道发生了什么,因为语法总是相同的。

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

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

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

关于c# - 如何在 XAML 中定义对现有对象的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6736697/

相关文章:

c# - 连续显示字符串的字符并为标签 c# 制作计时器

.net - 不区分大小写的字符串与 linq-to-sql 和 linq-to-objects 进行比较

.net - 在不同线程中创建 WPF 窗口时出现异常

wpf - 在 WPF 中使用数据绑定(bind)启动动画

C# - TimeSpan 不适用于超过一天的秒数

c# - 只能用 C 编写操作系统吗?

c# - HtmlAgilityPack.HtmlDocument() 导致错误

.net - 如何调整 DbFit 中的 CommandTImeout 以适应长时间运行的查询?

.net - 什么时候使用AutoResetEvent和ManualResetEvent代替Monitor.Wait()/Monitor.Pulse()?

wpf - 从 RadGridView WPF c# 中删除分组网格线