5

こんにちは、コントロールの親にフォーカスを設定できません。キャンバスに配置されたコントロールがあります。そのコントロールをクリックすると、いくつかのキーボード イベントを処理するためにキャンバスにフォーカスを設定する必要があります。しかし、私はそのように焦点を合わせようとしていたという事実にもかかわらず

 protected override void OnPreviewMouseDown(MouseButtonEventArgs e)
        {
            base.OnPreviewMouseDown(e);
           Canvas designer = VisualTreeHelper.GetParent(this) as Canvas;
          designer.Focus() ;//this doesn't work
           Keyboard.Focus(designer); //this also doesn't work


        }

キャンバスに関連付けられているキーボード イベントは発生しません。

4

3 に答える 3

12

Canvas のFocusableIsEnabledの両方が true に設定されていることを確認してください。それがないと、Focus()は失敗します。Focus()ドキュメントから:

フォーカス可能にするには、Focusable と IsEnabled の両方が true でなければなりません。

さらに、PreviewMouseDown イベントでこれを行っているため、次のようにメソッドを作り直す必要がある場合があります。

 protected override void OnPreviewMouseDown(MouseButtonEventArgs e)
 {
     Canvas designer = VisualTreeHelper.GetParent(this) as Canvas;
     designer.Focus() ;//this doesn't work
     Keyboard.Focus(designer); //this also doesn't work

     // Just in case something else is changing your focus as a result of a mouse event...
     e.Handled = true;
     base.OnPreviewMouseDown(e);
 }
于 2010-10-11T14:56:46.260 に答える
0

FocusManager を使用して、キャンバスをフォーカス スコープとして設定します。これを行う方法の良い例がここにあります: Can't set focus to a child of UserControl

于 2010-11-18T23:57:02.920 に答える