2

ここで長く無駄な検索をした後、これが私の問題です。ElementHostを介してWinFormsフォームに表示するWPFUserControlがあります。開発はほぼ完了していますが、まだ2つの小さな副作用があります。

まず、ContextMenuを開くと、カーソルキーの上下で項目を選択できると思っていました。しかし、このキー押下は欠落しているようです。2つ目は、Keyboard.Modifiersに明示的にクエリを実行して、Ctrlキーが押されているかどうかを判断すると、Keyboard.Modifiersは常に「None」を返します。私がここで読んでいる限り、それはキーボードまたはフォーカスステートと関係があると思います。ここでは、 Integration.ElementHost.EnableModelessKeyboardInterop(window)を呼び出すためのソリューションとしてよく読んでいますが、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-Window内のElementHostに配置しました。WinForms-Window内にフォーカスをキャプチャできるものが他にある場合(もちろんあります)、WPF-Controlを右クリックしてコンテキストメニューを開くことはできますが、カーソルキーを上下に押しても選択されません。 2つのアイテムの。最初の項目をクリックしてCtrlキーを押したままにすると、Keyboard.ModifiersはModifiers.Noneを返します。

4

1 に答える 1

0

誰か私の後頭部を叩いてくれませんか?私はこれに対する解決策を数時間探していましたが、この質問を投稿した後、私が見つけた答えは目立たないものでした

ContextMenu について:

UserControl1.Focusable = True

Keyboard.Modifiers について:
Visual Basic の有効な代替手段を見つけました。

If My.Computer.Keyboard.CtrlKeyDown Then ...

しかし、完全なフレームワークに相当する普遍的なものが見つかりません。誰かが代替案を見つけた場合は、バズインしてください。

于 2012-04-17T08:57:53.240 に答える