wpf设置焦点的问题

geo*_*rge 4 c# wpf events focus setfocus

嗨,我无法将注意力集中在控制之父上.我有一个放在画布上的控件.如果我单击该控件,我需要在画布上设置焦点以处理一些键盘事件.尽管事实上我试图像这样设定焦点

 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


        }
Run Code Online (Sandbox Code Playgroud)

附加到画布的键盘事件不会触发.

Ree*_*sey 12

确保Canvas的FocusableIsEnabled都设置为true.没有它,Focus()将失败.来自Focus()文档:

要成为焦点,Focusable和IsEnabled必须都是真的.

此外,由于您在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);
 }
Run Code Online (Sandbox Code Playgroud)