0

我的问题是双重的,但我想它们是相关的,如果我设法解决其中一个问题,我会同时解决这两个问题。

首先,让我们看看链接到 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我将 设置HeaderDockPanel包含图像和TextBlock.

一个MenuItem看起来像这样:

在此处输入图像描述

在这里您可以看到主要问题。可以看到有“二选一”。一种外部选择,一种内部选择。如果我单击内部选择,一切都很好,并且从我的视图模型中调用了我的 SelectModem 方法。但是,如果您单击外部选择,上下文菜单就会消失,因此用户认为他已经做出了选择,但实际上视图模型上没有调用任何方法。

我的第二个问题是,如果我MenuItem通过添加IsEnabled="False"上面的代码来禁用,菜单项看起来被禁用(文本变灰),我无法进行内部选择,但在悬停时仍然显示外部选择,当单击菜单时消失(但我的视图模型中没有触发任何内容)

所以问题是:我怎样才能摆脱外部选择?

4

0 回答 0