私の問題は2つありますが、それらは関連していると思います。そのうちの1つを修正できれば、両方を解決できます。
まず、Caliburn.Micro ビュー モデルにリンクされている ContextMenu の xaml コードを見てみましょう。
<ContextMenu>
<MenuItem Header="Configure modem" ItemsSource="{Binding Modems}">
<MenuItem.ItemTemplate>
<DataTemplate>
<MenuItem>
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<ca:ActionMessage MethodName="SelectModem">
<ca:Parameter Value="{Binding Path=DataContext, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=UserControl}}" />
</ca:ActionMessage>
</i:EventTrigger>
</i:Interaction.Triggers>
<MenuItem.Header>
<DockPanel>
<Image DockPanel.Dock="Left" Source="{Binding CarrierProfile.CarrierProfileIcon}" Width="40" Height="40"/>
<TextBlock Text="{Binding MenuText}" VerticalAlignment="Center" Margin="10 0"/>
</DockPanel>
</MenuItem.Header>
</MenuItem>
</DataTemplate>
</MenuItem.ItemTemplate>
</MenuItem>
</ContextMenu>
したがって、基本的にこれは、画像と を含むDataTemplate
に を設定したところHeader
です。DockPanel
TextBlock
1つMenuItem
は次のようになります。
ここで、主な問題を見ることができます。「二択」になっていることがわかります。1 つの外側の選択と 1 つの内側。内側の選択をクリックすると、問題なく SelectModem メソッドがビュー モデルから呼び出されます。ただし、外側の選択をクリックすると、コンテキスト メニューが消えて、ユーザーは選択を行ったと思いますが、実際にはビュー モデルでメソッドは呼び出されません。
MenuItem
私の2番目の問題は、上記のコードを追加して無効にするIsEnabled="False"
と、メニュー項目が無効に見え (テキストがグレー表示されます)、内側の選択を行うことができませんが、ホバーすると外側の選択が表示され、メニューをクリックするとメニューが表示されます。消えます(しかし、私のビューモデルでは何もトリガーされません)
問題は、外側の選択を取り除くにはどうすればよいかということです。