WPF中禁用的菜单元素看起来已启用

时间:2013-02-26 07:38:15

标签: c# .net wpf menuitem

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

首先,让我们看一下链接到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的{​​{1}}。

一个TextBlock看起来像这样:

enter image description here

在这里你可以看到主要问题。你可以看到有“两个选择”。一个外部选择,一个内部。如果我单击内部选择,一切都很好,我的ViewModem方法从我的视图模型中调用。但是,如果单击外部选择,则上下文菜单会消失,以便用户认为他已做出选择,但实际上在视图模型上没有调用任何方法。

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

所以问题是:我如何摆脱外部选择?

0 个答案:

没有答案