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 都必须为真。

此外,由于您是在 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 回答
-4

我使用带有属性的 My UserControl:Background="Transparent"。

于 2015-07-28T17:04:55.757 回答