2012-04-17 9 views
2

ここで、長く無駄な検索を行った後、これは私の問題です。私は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

+0

WPFとWinFormsの統合は、水密性がありません。 WinFormsアプリケーションをWPFに変換できない場合は、WinFormsコントロール(ブリーチ)でニーズを満たす方法を理解する方が良いかもしれません。 –

+0

@GregSansom私はWinFormsを取り除こうとしていますが、それは一歩進んでいます。置き換えられたListViewコントロール(**チョーク**)内のいくつかのOwnerDrawを取り除いた方法はありません;-) – Markus

+0

私はあなたがWPFウィンドウを持っていると思う - コンテキストメニュー自体... –

答えて

0

を返し誰かが私の頭の背中を押してくださいことはできますか?私は時間のカップルのために、このための解決策を探していたが、この質問を投稿した後、私が見つけた答えはのContextMenuについて

地味です:

UserControl1.Focusable = True 

Keyboard.Modifiersについて:
Visual Basicの代替案が見つかりました。

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

しかし、私は完全なフレームワークの普遍的な同等物を見つけることができません。誰かが何らかの選択肢を見つけた場合は、ぜひお立ち寄りください。

関連する問題