Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF中禁用的菜单元素看起来已启用_C#_.net_Wpf_Menuitem - Fatal编程技术网

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

C# WPF中禁用的菜单元素看起来已启用,c#,.net,wpf,menuitem,C#,.net,Wpf,Menuitem,我的问题有两方面,但我想它们是相关的,如果我设法解决其中一个问题,我将解决这两个问题 首先,让我们看看链接到Caliburn.Micro view模型的ContextMenu的xaml代码: <ContextMenu> <MenuItem Header="Configure modem" ItemsSource="{Binding Modems}"> <MenuItem.ItemTemplate> <DataTem

我的问题有两方面,但我想它们是相关的,如果我设法解决其中一个问题,我将解决这两个问题

首先,让我们看看链接到Caliburn.Micro view模型的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>

因此,基本上这只是一个
数据模板
,我将
标题
设置为一个
DockPanel
,其中包含一个图像和一个
TextBlock

一个
MenuItem
如下所示:

在这里你可以看到主要的问题。您可以看到有“两个选择”。一个外部选择,一个内部选择。如果单击内部选择,一切正常,并从视图模型调用SelectModem方法。但是,如果单击外部选择,关联菜单将消失,因此用户认为他已经进行了选择,但实际上没有对视图模型调用任何方法

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


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

为什么要在
MenuItem
DataTemplate
中添加另一个
MenuItem
?@MD.Unicorn?我可以看出这当然是问题所在。当我将其删除时,所选内容与我预期的一样:)。因此,现在我只需要了解如何在删除内部
菜单项时使EventTrigger工作。非常感谢你为我指明了正确的方向。我已经看了一段时间了,所以我对自己的错误视而不见@Unicorn博士-EventTrigger现在也开始工作了,但还有一个问题。既然我没有那个内部菜单项,那么如何从DataTemplate中禁用菜单项呢?(只有部分菜单项将根据项源的属性被禁用)让我们给出一个答案:-)@MD.Unicorn-然后通过添加带有触发器的样式来启用/禁用。你想写一个答案,这样我就可以把你的答案标记为接受,还是你想让我回答我自己的问题?