WPF menu shortcut keys

When designing actions you can enter shortcut keys like ctrl-S. These shortcuts are set per action.

There has been issues with WPF not listening to these shortcuts - and it seems that main cause of the problem was that the WPF app lost all keyboard focus. It is still no fully clear to me how this can be - but it easy to see when it happens.

The suggested way to deal with the issue is to react to null focus and fix it:

 this.IsKeyboardFocusWithinChanged += (s, e) =>
 {
   if (!this.IsActive)
 return;

 var foc = Keyboard.FocusedElement;

 if (foc == null)

 {

 Trace.WriteLine("IsKeyboardFocusedChanged NOTHING");

 RescueNullFocus();

 }

 else

 Trace.WriteLine("IsKeyboardFocusedChanged " + foc.GetType().Name);

 

 };


This calls the RescueNullFocus method and you can define it like this:

private void RescueNullFocus()

{

new DisplayQueueThis(() =>

{

if (Keyboard.FocusedElement == null && this.IsActive)  // if the keyboard focused is lost - return it to something usefull

{

IInputElement x = null;

if (_wecpof.CurrentWindow() != null)

x = (_wecpof.CurrentWindow() as FrameworkElement).PredictFocus(FocusNavigationDirection.Right) as IInputElement;

if (x == null)

x = (_wecpof).PredictFocus(FocusNavigationDirection.Right) as IInputElement;

if (x != null) // Got stuck on Menu

{

if (!(x is MenuItem))

Keyboard.Focus(x);

else

{

// find a non menuitem

var next = x as FrameworkElement;

var stop = next;

while (next != stop && next != null && !(next is MenuItem))

next = next.PredictFocus(FocusNavigationDirection.Right) as FrameworkElement;

if (next != null)

Keyboard.Focus(x);

}

}

}

});

}

It is also a good idea to call RescueNullFocus at the start of the application.

A change was also introduced to the your WPF window own the InputBindings instead of the Wecpof. This is done with an extra parameter to _wecpof.EasyInit like this

_wecpof.EasyInit(_ecospace, false, pathToStyles, thestyle, this/*send in window as command target*/, _targetgroup);
This page was edited 96 days ago on 02/10/2024. What links here