我的问题是双重的,但我想它们是相关的,如果我设法解决其中一个问题,我会同时解决这两个问题。
首先,让我们看看链接到 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
包含图像和TextBlock
.
一个MenuItem
看起来像这样:
在这里您可以看到主要问题。可以看到有“二选一”。一种外部选择,一种内部选择。如果我单击内部选择,一切都很好,并且从我的视图模型中调用了我的 SelectModem 方法。但是,如果您单击外部选择,上下文菜单就会消失,因此用户认为他已经做出了选择,但实际上视图模型上没有调用任何方法。
我的第二个问题是,如果我MenuItem
通过添加IsEnabled="False"
上面的代码来禁用,菜单项看起来被禁用(文本变灰),我无法进行内部选择,但在悬停时仍然显示外部选择,当单击菜单时消失(但我的视图模型中没有触发任何内容)
所以问题是:我怎样才能摆脱外部选择?