まあ、いくつかの異なるものを試した後、私は仕事に何かを得ました:
void menuItem_PreviewGotKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
{
e.Handled = true;
}
コンテキストメニューのすべてのメニュー項目をループすることによって、ウィンドウベースクラスから自動的にこれを行うことができます。これには、テキストボックスを挿入するメニューアイテムのハイジャックが必要です。
void contextMenu_Opened(object sender, RoutedEventArgs e)
{
ContextMenu contextMenu = sender as ContextMenu;
foreach (FrameworkElement frameworkElement in contextMenu.Items)
{
if (frameworkElement is MenuItem)
{
MenuItem menuItem = (frameworkElement as MenuItem);
if (!(menuItem.Tag != null && menuItem.Tag.ToString() == "MaintainFocus"))
menuItem.PreviewGotKeyboardFocus += new KeyboardFocusChangedEventHandler(menuItem_PreviewGotKeyboardFocus);
}
}
}
void contextMenu_Closed(object sender, RoutedEventArgs e)
{
ContextMenu contextMenu = sender as ContextMenu;
foreach (FrameworkElement frameworkElement in contextMenu.Items)
{
if (frameworkElement is MenuItem)
{
MenuItem menuItem = (frameworkElement as MenuItem);
if (!(menuItem.Tag != null && menuItem.Tag.ToString() == "MaintainFocus"))
menuItem.PreviewGotKeyboardFocus -= menuItem_PreviewGotKeyboardFocus;
}
}
}
いくつかコードを投稿してください。私はあなたの実装を試しましたが、私はこの問題を抱えていません – MaRuf
メニュー項目を大幅に修正しましたので、ここでデモするのは難しいです。あなたが問題を見ていないなら、多分私たちのスタイリングのために。 – Dean