【发布时间】:2014-05-15 10:53:08
【问题描述】:
我有以下在 wpf 中定义上下文菜单的 xaml:
<Grid Name="grid">
<Button x:Name="settingsButton" DockPanel.Dock="Left" Content="Settings" Click="SettingsButtonClicked">
<Button.ContextMenu>
<ContextMenu>
<MenuItem Header ="Column Chooser">
<MenuItem IsCheckable="true" Header="A" IsChecked="{Binding Path=IsAChoosen}"></MenuItem>
<MenuItem IsCheckable="true" Header="B" IsChecked="{Binding Path=IsBChoosen}"></MenuItem>
<MenuItem IsCheckable="true" Header="C" IsChecked="{Binding Path=IsCChoosen}"></MenuItem>
</MenuItem>
</ContextMenu>
</Button.ContextMenu>
</Button>
</Grid>
如果我通过右键单击正常调出上下文菜单,则绑定可以正常工作。
但是,我希望在我左键单击按钮而不是右键单击时显示上下文菜单。所以我有以下代码来做到这一点:
public partial class SettingsView : UserControl
{
public SettingsView()
{
InitializeComponent();
settingsButton.MouseRightButtonDown += SettingsButtonOnMouseRightButtonDown;
}
private void SettingsButtonOnMouseRightButtonDown(object sender, MouseButtonEventArgs mouseButtonEventArgs)
{
settingsButton.ContextMenu.Visibility = Visibility.Hidden;
}
private void SettingsButtonClicked(object sender, RoutedEventArgs e)
{
settingsButton.ContextMenu.Visibility = Visibility.Visible;
settingsButton.ContextMenu.PlacementTarget = sender as Image;
settingsButton.ContextMenu.IsOpen = true;
}
}
当我这样做时,绑定不起作用。任何人都知道为什么它可以通过右键单击而不是当我强制它单击左键时?
【问题讨论】:
-
可能是因为您将
PlacementTarget设置为 null。sender将是Button类型,而不是Image