5

現在フォーカスされているコントロールに常にバインドされるプロパティが必要です。

現在フォーカスされているコントロールを取得する 2 つの方法を見てきました。

1 つは、Keyboard.FocusedElement を使用しています。2 つ目は、ビジュアル ツリーのトラバースです。

フォーカスされた要素が変更されるたびに知りたいので、ビジュアルツリートラバーサルは常に多くのコードを実行しているようです。

ただし、Keyboard.FocusedElement は INotifyPropertyChanged を実装していません。そのため、通常どおりバインドすることはできません。

変更されたときに通知する方法はありますか?

(または、現在フォーカスされているコントロールに常に設定されているプロパティを持つ他の方法はありますか?)

注:明らかに、各コントロールにイベントを追加して、プロパティを更新することができます。しかし、私は多くのコントロールを持っています。それぞれにイベントを添付する必要はありません。

4

1 に答える 1

6

Keyboard.GotKeyboardFocus 添付イベントの購読を試みることができます

要素がキーボード フォーカスを受け取ると発生します。

このイベント OnStartup にサブスクライブする例を次に示します。これを行い、たとえばバインドできる添付プロパティを更新する添付ビヘイビアを使用できます。

public partial class App : Application
{
    protected override void OnStartup(StartupEventArgs e)
    {
        EventManager.RegisterClassHandler(typeof(UIElement),
            Keyboard.GotKeyboardFocusEvent,
            new RoutedEventHandler(Keyboard_GotKeyboardFocus), true);

        base.OnStartup(e);
    }

    private void Keyboard_GotKeyboardFocus(object sender, RoutedEventArgs e)
    {
        Debug.WriteLine(e.OriginalSource);
    }
}
于 2012-07-06T17:49:08.947 に答える