0

私の問題は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です。DockPanelTextBlock

1つMenuItemは次のようになります。

ここに画像の説明を入力

ここで、主な問題を見ることができます。「二択」になっていることがわかります。1 つの外側の選択と 1 つの内側。内側の選択をクリックすると、問題なく SelectModem メソッドがビュー モデルから呼び出されます。ただし、外側の選択をクリックすると、コンテキスト メニューが消えて、ユーザーは選択を行ったと思いますが、実際にはビュー モデルでメソッドは呼び出されません。

MenuItem私の2番目の問題は、上記のコードを追加して無効にするIsEnabled="False"と、メニュー項目が無効に見え (テキストがグレー表示されます)、内側の選択を行うことができませんが、ホバーすると外側の選択が表示され、メニューをクリックするとメニューが表示されます。消えます(しかし、私のビューモデルでは何もトリガーされません)

問題は、外側の選択を取り除くにはどうすればよいかということです。

4

0 に答える 0