我的问题是双重的,但我猜他们是相关的,如果我设法解决其中一个问题,我会解决这两个问题。
首先,让我们看一下链接到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
看起来像这样:
在这里你可以看到主要问题。你可以看到有“两个选择”。一个外部选择,一个内部。如果我单击内部选择,一切都很好,我的ViewModem方法从我的视图模型中调用。但是,如果单击外部选择,则上下文菜单会消失,以便用户认为他已做出选择,但实际上在视图模型上没有调用任何方法。
我的第二个问题是,如果我通过在上面的代码中添加MenuItem
来禁用MenuItem
,则菜单项看起来已禁用(文本显示为灰色),我无法进行内部选择,但是悬停仍然显示外部选择,单击时菜单消失(但在我的视图模型中没有触发)
所以问题是:我如何摆脱外部选择?