左键单击下带有上下文菜单的WPF按钮
我对ContextMenu有点小问题左键单击下带有上下文菜单的WPF按钮,wpf,Wpf,我对ContextMenu有点小问题 <Window.Resources> <Style x:Key="ButtonWithContextMenuStyle" TargetType="Button"> <Setter Property="Background" Value="#cbeb00" /> <Setter Property="Foreground" Value="#505050" />
<Window.Resources>
<Style x:Key="ButtonWithContextMenuStyle" TargetType="Button">
<Setter Property="Background" Value="#cbeb00" />
<Setter Property="Foreground" Value="#505050" />
<Setter Property="FontSize" Value="12" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border CornerRadius="4" Background="{TemplateBinding Background}"
BorderThickness="0">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Margin="{TemplateBinding Padding}" />
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#aaaaaa"/>
<Setter Property="Foreground" Value="#dcff00"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Command="{Binding EditUserCommand}" Header="{DynamicResource EditUserContextMenuMW}"/>
<MenuItem Command="{Binding OpenHistoryCommand}" Header="{DynamicResource ConversationHistoryContextMenuMW}"/>
<MenuItem Command="{Binding OpenHistoryCommand}" Header="{DynamicResource BuyCreditContextMenuMW}"/>
<Separator />
<MenuItem Command="{Binding LogoutCommand}" Header="{DynamicResource LogoutContextMenuMW}"/>
</ContextMenu>
</Setter.Value>
</Setter>
<Style.Triggers>
<EventTrigger RoutedEvent="Click" >
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="ContextMenu.IsOpen">
<DiscreteBooleanKeyFrame KeyTime="0:0:0" Value="True"/>
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
</Window.Resources>
当我点击鼠标右键时,一切正常。ContextMenu打开,我可以在MenuItem上调用命令
我希望在单击鼠标左键时看到相同的行为。但是,只有ContextMenu打开,我无法调用该命令
有人能告诉我我做错了什么吗?您需要使用
鼠标右键向下
路由事件
<EventTrigger RoutedEvent="MouseRightButtonDown">
现在它应该可以工作了
以下是弹出窗口的命令:
Command="{Binding CommandShowPopup}" CommandParameter="{Binding ElementName=btnMenuPopup}"
命令执行:
public class CommandShowPopup : ICommand
{
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
(parameter as Popup).IsOpen = true;
}
}
此解决方案为我提供了鼠标右键事件,即使我使用“MouseLeftButtonDown”,它也无法正常工作。两种解决方案都可以完美地处理事件,我在发布“stack”之前尝试了这一点,但我无法调用命令。我不知道为什么,因为在这个窗口中,我使用了命令,所有操作都正常(当然,除了这个)。问题是关联菜单与其放置目标不在同一个视觉树中:
<Popup x:Name="btnMenuPopup" Placement="Mouse" StaysOpen="False">
<Border BorderBrush="Black" BorderThickness="2" CornerRadius="2">
<Menu>
<MenuItem Header="Menu item 1" Command="{Binding EditCommand, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}"/>
<MenuItem Header="Menu item 2" />
<Separator />
<MenuItem Header="Menu item 3" />
<Menu.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Vertical"/>
</ItemsPanelTemplate>
</Menu.ItemsPanel>
</Menu>
</Border>
</Popup>
private void Button_Click(object sender, RoutedEventArgs e)
{
btnMenuPopup.IsOpen = true;
}
Command="{Binding CommandShowPopup}" CommandParameter="{Binding ElementName=btnMenuPopup}"
public class CommandShowPopup : ICommand
{
public bool CanExecute(object parameter)
{
return true;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
(parameter as Popup).IsOpen = true;
}
}