2

私がしたいのは、TextBox から継承したコントロールの Text プロパティへの割り当てをインターセプトすることです。このテキストを変更し、変更したテキストをテキスト ボックスに表示したいと考えています。また、プロパティが読み取られたときにテキスト ボックスに表示されるものとは異なるものを返す機能も必要です。Win Forms では、仮想として宣言されている Text プロパティをオーバーライドすることでこれを行うことができました。明らかに、依存関係プロパティの場合は少し異なります。私が持っていた 1 つのアイデアは、OverridePropertyMetadata を使用して独自のコールバックにプロパティの変更を検出させ、GetMetadata で取得した元のコールバックを呼び出すことでした。プロパティが変更されたコールバックがマージされるため、これは機能しません。このプロパティに固有の別の方法があるかどうかに興味がありますが、一般的に依存関係プロパティを「オーバーライド」できるかどうかを知りたいです。

私のアプリケーションは、テキストが 1000 に設定されている場合 (数値形式の場合) に書式設定されたテキスト ボックスです。テキスト ボックスには 1,000 が表示されますが、テキストを読むと再び 1000 が返されます。ボックスは書式設定されていないテキストを内部的に追跡します。 . 私はかなり簡単に Win Forms に実装することができましたが、現在は WPF に移植しようとしています。

4

1 に答える 1

1

OverridePropertyMetadataは行く方法だと思いますが、 new を定義するのではなく、 newPropertyChangedCallbackを書くことができます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 に答える