george
george

Reputation: 61

wpf problem with setting focus

Hi I'm not able to set focus on parent of control. I have a control which is placed on canvas. If I click that control I need to set focus on canvas in order to handle some keyboard events. However despite the fact that I was trying to set focus like that

 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


        }

Keyboard events which are attached to canvas don't fire.

Upvotes: 6

Views: 18066

Answers (3)

Denis535
Denis535

Reputation: 3590

I use My UserControl with attribute: Background="Transparent".

Upvotes: -4

Trevor Tubbs
Trevor Tubbs

Reputation: 2117

Use the FocusManager to set the canvas as a focus scope. There is a good example of how to do this here: Can't set focus to a child of UserControl.

Upvotes: 0

Reed Copsey
Reed Copsey

Reputation: 564413

Make sure that the Canvas has Focusable and IsEnabled both set to true. Without that, Focus() will fail. From Focus() docs:

To be focusable, Focusable and IsEnabled must both be true.

In addition, since you're doing this in a PreviewMouseDown event, you may need to rework your method as follows:

 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);
 }

Upvotes: 12

Related Questions