2

次のように、コントロールのフォーカスをビューモデルのプロパティにバインドしようとしています。

 public class Focus
{
    public static readonly DependencyProperty HasFocusProperty = DependencyProperty.RegisterAttached("HasFocus",
                                                                                                             typeof(bool),
                                                                                                             typeof(Focus),
                                                                                                             new PropertyMetadata(false, HandleHasFocusChanged),
                                                                                                             null
                                                                                                            );

    private static void HandleHasFocusChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var uiElement = d as UIElement;
        var value = (bool)e.NewValue;

        if (value)
        {
            FocusManager.SetFocusedElement(uiElement, uiElement);
        }
    }

    public static bool GetHasFocus(UIElement obj)
    {
        return (bool)obj.GetValue(HasFocusProperty);
    }

    public static void SetHasFocus(UIElement obj, bool value)
    {
        obj.SetValue(HasFocusProperty, value);
    }
}

これは最初のフォーカスでは機能しますが、その後はまったく影響がないようです。

誰かが私が間違っていること、または私が達成しようとしていることを行うためのより良い方法を知っていますか?

4

1 に答える 1

1

おそらく、論理フォーカスとキーボードフォーカスの違いがあなたを悩ませています。あなたはここでそれについて読むことができます。フォーカススコープに関する部分に特に注意してください。HasFocusプロパティがtrueに設定されている場合、ユーザーコントロールに論理フォーカスを設定するコードを実装しましたが、falseに設定されている場合は何もしません。その場合、論理的な焦点はそのままになります。一方、ユーザーコントロールのlostfocusイベントのイベントハンドラーを接続していません。つまり、コントロールがフォーカスを失っても、HasFocusプロパティは再び影響を受けません。

于 2009-12-03T22:14:03.317 に答える