C# WPF中禁用的菜单元素看起来已启用
我的问题有两方面,但我想它们是相关的,如果我设法解决其中一个问题,我将解决这两个问题 首先,让我们看看链接到Caliburn.Micro view模型的ContextMenu的xaml代码: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
<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-然后通过添加带有触发器的样式来启用/禁用。你想写一个答案,这样我就可以把你的答案标记为接受,还是你想让我回答我自己的问题?