【发布时间】:2014-11-13 13:07:18
【问题描述】:
我的 WPF 应用程序有一个按钮,单击它会打开一个上下文菜单。 我正在使用 MVVM 模式,这里是 XAML 代码。
在 Viewmodel 的 buttonClick() 中,IsOpenMenu 将被设置为 true。但我无法正确启动上下文菜单。
<Button Content="Click Me" Grid.Column="1" Name="btnView1" Height="25" Width="75" Command="{Binding ButtonClick}"
ContextMenuService.IsEnabled="False">
<Button.ContextMenu>
<ContextMenu IsEnabled="True" IsOpen="{Binding IsOpenMenu}" PlacementTarget="{Binding ElementName=btnView1}" Placement="Bottom" >
<MenuItem Header="Menu 1" IsCheckable="True"/>
<MenuItem Header="Menu 1" IsCheckable="True"/>
<MenuItem Header="Menu 1" IsCheckable="True"/>
<MenuItem Header="Menu 1" IsCheckable="True"/>
</ContextMenu>
</Button.ContextMenu>
</Button>
但是当我在代码隐藏中设置如下所示的 3 个属性时,我得到了正确的结果。
private void btnView1_Click(object sender, RoutedEventArgs e)
{
(sender as Button).ContextMenu.IsEnabled = true;
(sender as Button).ContextMenu.PlacementTarget = (sender as Button);
(sender as Button).ContextMenu.IsOpen = true;
}
我觉得 ContextMenu 上的 PlacementTarget 属性设置不正确。 我做错什么了吗?
【问题讨论】:
-
尝试在
btnView1_Click处理程序中设置一些断点,看看它是否真的被触发了。代码对我来说看起来不错。 -
检查您是否正确地对属性 IsOpenMenu 执行通知属性更改,并且在您用于验证事物的事件处理程序中,检查上下文菜单数据上下文是。