2

LineCount何らかの目的で、複数行のテキスト ボックスが変更さ れるたびにイベントを発生させたいと
考えました。依存関係プロパティをにバインドすると、これを達成できると思いました。 TextBox.LineCount
以下はコード サンプルです。

XAML

<local:MyTextBox Margin="5,65,5,5" x:Name="txtBox" 
       AcceptsReturn="True" AcceptsTab="False" 
       MyProperty="{Binding LineCount, RelativeSource={RelativeSource Self}}" />

コードビハインド

public class MyTextBox : TextBox
{
    public MyTextBox()
    {
        DataContext = this;
    }

    public int MyProperty
    {
        get
        {
            return (int)this.GetValue(LineCountProperty);
        }
        set
        {
            this.SetValue(LineCountProperty, value);
        }
    }

    public static readonly DependencyProperty LineCountProperty =
        DependencyProperty.Register(
        "MyProperty",
        typeof(int),
        typeof(TextBox),
        new FrameworkPropertyMetadata(
            new PropertyChangedCallback(
             (dp, args) => { MessageBox.Show(args.NewValue.ToString()); })
        ));
}

メッセージボックスは、行数が変更された後ではなく、フォームが読み込まれたときにのみ表示されます。
ただし、Binding をMyPropertyTextBox からLineCount変更Text すると、テキストが変更されるたびに PropertyChangedEvent が発生します。
TextChanged イベントハンドラーからカスタム LineCount 変更イベントを発生させるDepedencyPropertiesことができると確信していますが、より効率的であると信じているため、経由でこれを実行したいと考えています。

4

1 に答える 1

2

問題は、それLineCountが依存関係プロパティではないことです。MSDNのドキュメントを参照してください。このため、バインディングはサポートされておらず、変更通知は提供されません。

カスタムコントロールを作成していることを考えると、本当にバインディングを使用する必要がありますか?TextChangedイベントを内部で処理し、行数が手動で変更されたことを検出してみませんか。

于 2013-02-27T12:58:21.690 に答える