我想要做的是拦截从TextBox继承的控件上Text属性的赋值。我想要修改此文本并在文本框中显示修改后的文本。我还需要能够在读取属性时返回与文本框中显示的内容不同的内容。在Win Forms中,我可以通过覆盖Text属性来实现这一点,因为它被声明为虚拟属性。显然,依赖属性有些不同。我的一个想法是使用OverridePropertyMetadata让我自己的回调检测属性更改,然后调用使用GetMetadata获得的原始回调。这不适用于属性更改回调合并。我有兴趣是否有另一种方法来执行此特定于此属性但我想知道是否可能“覆盖”一般的依赖属性。
我的应用程序是一个格式化的文本框,当文本设置为1000时(对于数字格式),文本框显示1,000但是当您阅读文本时再次返回1000 - 该框将跟踪联合国内部格式化文本。我设法在Win Forms中很容易实现,但我现在正尝试将其移植到WPF。
答案 0 :(得分:1)
我认为OverridePropertyMetadata
是可行的方式,但您可以编写新的PropertyChangedCallback
来代替新的CorceValueCallback
:
static object CoerceText(DependencyObject d, object baseValue)
{
string s = (string)baseValue;
// Change s to whatever you want
...
return s;
}