【发布时间】:2019-04-11 11:56:23
【问题描述】:
我的 WPF UserControl 中有一个自定义依赖属性,名为 CustomForeground。
如果CustomForeground 上没有指定值,我希望它回退到UserControl.ForeGround。
我正在使用下面的代码,它可以工作,但确实感觉有点 hacky。
任何人都可以确认是否有实现此依赖属性的“正确”方式吗?
public SolidColorBrush CustomForeground
{
get { return (SolidColorBrush)(GetValue(CustomForegroundProperty) ?? GetValue(ForegroundProperty)); }
set { SetValue(CustomForegroundProperty, value); }
}
注意 - 我省略了 DependencyProperty 的声明,因为它只是样板文件。
【问题讨论】:
-
"如果没有指定值" - 这是否意味着如果该属性从未设置,或者当属性“重置”为例如时也应该使用后备值空值?在属性包装器的getter中做肯定是错误的,因为getter在某些情况下可能会被绕过。
-
如果您尝试绑定到
CustomForeground,这将不起作用——绑定不使用 C# 属性,它们直接转到 DependencyProperty。只是样板的 C# 属性 - DependencyProperty 是所有操作发生的地方! -
@canton7 CustomForeground 是 UserControl 的依赖属性。 OP 只是省略了 CustomForegroundProperty 标识符字段的声明。
-
不,它是一个包含 DependencyProperty 的 C# 属性。实际的 DependencyProperty 是您所说的遗漏的位,它以
public static readonly DependencyProperty CustomForegroundProperty = ...开头。 C# 属性只是为了更好地使用 C# 代码中的 DependencyProperty - 它不被绑定使用。 -
@canton7 也许再读一遍这个问题。有一个依赖属性(与 DependencyProperty 标识符字段和 CLR 包装器一样)。问题是如何让这个依赖属性在没有设置的时候返回控件的
Foreground属性的值。
标签: c# wpf dependency-properties