wpf проблема с настройкой фокуса - PullRequest
4 голосов
/ 11 октября 2010

Привет, я не могу установить фокус на родительском элементе управления.У меня есть элемент управления, который находится на холсте.Если я щелкаю этот элемент управления, мне нужно установить фокус на холсте, чтобы обрабатывать некоторые события клавиатуры.Однако, несмотря на то, что я пытался установить фокус таким образом,

 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


        }

События клавиатуры, которые прикреплены к холсту, не запускаются.

Ответы [ 3 ]

12 голосов
/ 11 октября 2010

Убедитесь, что Canvas имеет Focusable и IsEnabled , оба установлены в значение true.Без этого 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);
 }
0 голосов
/ 28 июля 2015

Я использую My UserControl с атрибутом: Background = "Transparent".

0 голосов
/ 19 ноября 2010

Используйте FocusManager, чтобы установить холст в качестве области фокусировки. Вот хороший пример того, как это сделать: Невозможно установить фокус на дочерний элемент UserControl .

.
...