2

我想要做的是拦截对从 TextBox 继承的控件上的 Text 属性的分配。我想修改此文本并将修改后的文本显示在文本框中。我还需要能够在读取属性时返回与文本框中显示的内容不同的内容。在 Win Forms 中,我可以通过重写 Text 属性来做到这一点,因为它被声明为虚拟的。显然,依赖属性有些不同。我的一个想法是使用 OverridePropertyMetadata 让我自己的回调检测属性更改,然后调用使用 GetMetadata 获得的原始回调。这不起作用,因为属性更改的回调被合并。如果有另一种特定于该属性的方法,我会很感兴趣,但我想知道一般情况下是否可以“覆盖”依赖属性。

我的应用程序是一个格式化的文本框,当文本设置为 1000 时说(对于数字格式),文本框显示 1,000 但是当您阅读文本时,您会再次返回 1000 - 该框将在内部跟踪未格式化的文本. 我设法相当容易地在 Win Forms 中实现,但现在正试图将其移植到 WPF。

4

1 回答 1

1

我认为这OverridePropertyMetadata是要走的路,但不是定义一个新的PropertyChangedCallback,你可以写一个新的CorceValueCallback

static object CoerceText(DependencyObject d, object baseValue)
{
    string s = (string)baseValue;

    // Change s to whatever you want
    ...

    return s;
}
于 2012-05-24T10:15:52.183 回答