經過漫長而毫無結果的搜索之後,這是我的問題。我有一個WPF UserControl,它通過ElementHost顯示在WinForms表單中。發展幾乎完成,但仍有兩個小副作用。首先,如果我打開ContextMenu,我希望我可以通過光標鍵向上/向下選擇項目。但這個按鍵似乎不見了。 第二個是,如果我明確查詢Keyboard.Modifiers以確定是否按下Ctrl鍵,則Keyboard.Modifiers總是返回'None'。 我在這裏閱讀時,我認爲它與鍵盤或焦點狀態有關。我經常在這裏閱讀解決方案,以呼叫Integration.ElementHost.EnableModelessKeyboardInterop(窗口)但我沒有WPF窗口,我只是有一個WPF-UserControl。WinForms中的WPF用戶控件鍵盤問題
我創建了一個新的簡化項目,以將複雜度降至最低。背後
Public Class UserControl1
Private Sub MenuItem_Click(sender As System.Object, e As System.Windows.RoutedEventArgs)
If Keyboard.Modifiers = ModifierKeys.None Then
Debug.WriteLine("Modifiers = None") ' <= I am always here, even if I press Ctrl
Else
Debug.WriteLine("Modifiers = Not None")
End If
End Sub
End Class
我把這個控制到ElementHost的一個WinForms-Window內
XAML
<UserControl x:Class="UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="50" d:DesignWidth="300">
<TextBlock Text="This is a Demo-Text">
<TextBlock.ContextMenu>
<ContextMenu>
<MenuItem Header="First" Click="MenuItem_Click"></MenuItem>
<MenuItem Header="Second"></MenuItem>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
</UserControl>
代碼。如果我在WinForms-Window中有其他東西(當然是我可以捕獲焦點),我仍然可以通過在WPF-Control上右鍵單擊來打開ContextMenu,但向上或向下按下光標鍵不會選擇任何這兩個項目。如果我單擊第一個項目,按住Ctrl鍵,Keyboard.Modifiers仍返回Modifiers.None
WPF和WinForms之間的集成不太嚴密。如果您無法將WinForms應用程序轉換爲WPF,則最好在WinForms控件(blech)中找出如何滿足您的需求。 – 2012-04-17 07:01:17
@GregSansom我試圖擺脫WinForms,但它是一步到位。我在被替換的ListView控件中刪除了一些OwnerDraw(** choke **)沒有辦法回來;-) – Markus 2012-04-17 07:13:43
我認爲你有一個WPF窗口 - 上下文菜單本身... – 2012-04-17 07:55:21