ここで、長く無駄な検索を行った後、これは私の問題です。私はWPF UserControlを持っていて、ElementHostを介してWinFormsフォームに表示しています。開発はほぼ完了していますが、依然として2つの小さな副作用があります。WinForms内のWPF UserControlでのキーボードの問題
まず、ContextMenuを開くと、カーソルキーの上/下を使用して項目を選択できると予想しました。しかし、このキーを押すことは見当たらない。 Keyboard.ModifiersにCtrl-Keyが押されたかどうかを明示的に問い合わせると、Keyboard.Modifiersは常に 'None'を返します。 私がここまで読んだところでは、キーボードやFocusstatesと関係があると思います。私はここで、Integration.ElementHost.EnableModelessKeyboardInterop(ウィンドウ)を呼び出すソリューションとしてよく読んでいますが、私はWPF-Windowを持っていません。WPF-UserControlを持っています。
私は複雑さを最小限に抑えるための新しい簡略化プロジェクトを作成しました。
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>
コード
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
の背後に私はWinFormsの-ウィンドウ内ElementHostに、このコントロールを置きます。 WPF-Controlを右クリックしてContextMenuを開くことはできますが、カーソルキーを上下に押しても何も選択されません。の2つの項目の。私は最初の項目をクリックし、Ctrlキーを押しながらキーを押したまま、Keyboard.Modifiers場合はまだModifiers.Noneに
WPFとWinFormsの統合は、水密性がありません。 WinFormsアプリケーションをWPFに変換できない場合は、WinFormsコントロール(ブリーチ)でニーズを満たす方法を理解する方が良いかもしれません。 –
@GregSansom私はWinFormsを取り除こうとしていますが、それは一歩進んでいます。置き換えられたListViewコントロール(**チョーク**)内のいくつかのOwnerDrawを取り除いた方法はありません;-) – Markus
私はあなたがWPFウィンドウを持っていると思う - コンテキストメニュー自体... –