我的WPF应用程序有一个按钮,可以在单击它时打开一个Contextmenu。 我正在使用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属性没有正确设置。 我做错了吗?
答案 0 :(得分:-1)
不幸的是,由于视觉树的工作原理,您编写的xaml无法正常工作,上下文菜单不是按钮所在的可视树的一部分,因此因此无法识别名称btnView1
每次都需要上下文菜单出现在同一个地方吗?如果您将放置目标留空,如果我没记错的话,应该将鼠标单击放置。