左键单击时的 WPF ContextMenu 仅显示但不让我单击
WPF ContextMenu on Left Click only show but don't let me click
我正在开发一个仅使用 Controls:Tiles
和属性 ContextMenu
的菜单栏,它只允许我单击鼠标右键打开它。经过一番搜索后,我使其可以用鼠标左键单击,但行为不同:当我按下右键单击时,ContextMenu
打开并且所有 MenuItems
都是可单击的。当我按下左键时,单击 ContextMenu
打开,但所有 MenuItems
看起来都已禁用,我无法单击它们。
我的代码在这里:
<Controls:Tile x:Name="FileTile" Width="Auto" Height="30" TitleFontSize="10" HorizontalContentAlignment="Left"
VerticalAlignment="Top" VerticalContentAlignment="Top" Background="White" HorizontalTitleAlignment="Right"
Foreground="Gray" ContextMenuService.IsEnabled="True">
<Controls:Tile.Content>
<StackPanel Orientation="Horizontal" Height="Auto">
<Image Source="/images/topbaricons/files.png" Width="22" Height="22" VerticalAlignment="Center" HorizontalAlignment="Left"/>
<TextBlock Text="{x:Static p:Resources.File}" VerticalAlignment="Center" Margin="5,0,5,0" />
</StackPanel>
</Controls:Tile.Content>
<Controls:Tile.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<EventTrigger RoutedEvent="Click">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="ContextMenu.IsOpen" FillBehavior="HoldEnd">
<DiscreteBooleanKeyFrame KeyTime="0:0:0" Value="True"/>
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
</Controls:Tile.Style>
<Controls:Tile.ContextMenu>
<ContextMenu x:Name="File_ContextMenu" >
<MenuItem Header="{x:Static p:Resources.Menu_item_New}" Command="ApplicationCommands.New" IsEnabled="true">
<MenuItem.Icon>
<Image Source="/images/topbaricons/new_file.png" Height="22" Width="22" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="{x:Static p:Resources.Menu_item_Open}" Command="ApplicationCommands.Open" IsEnabled="true">
<MenuItem.Icon>
<Image Source="/images/topbaricons/open_file.png" Height="22" Width="22" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="{x:Static p:Resources.Menu_item_Save}" x:Name="MenuItemSave" Command="ApplicationCommands.Save" IsEnabled="False">
<MenuItem.Icon>
<Image Source="/images/topbaricons/save.png" Height="22" Width="22" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Command="ApplicationCommands.SaveAs" Visibility="Visible" >
<MenuItem.Icon>
<Image Source="/images/topbaricons/save_as.png" Height="22" Width="22" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="{x:Static p:Resources.Menu_item_Exit}" Command="ApplicationCommands.Close" IsEnabled="true">
<MenuItem.Icon>
<Image Source="/images/topbaricons/off.png" Height="22" Width="22" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</Controls:Tile.ContextMenu>
</Controls:Tile>
为了准确显示我一直在谈论的差异 post 有这张图片:
有人可以帮助我吗?我真的很想用左键单击,就像用右键单击一样。
谢谢。
我想命令的 CanExecute
将在某处处理(也许当前关注的元素有自己的实现)。正在粘贴
<ContextMenu.CommandBindings>
<CommandBinding Command="ApplicationCommands.Open" CanExecute="CommandBinding_CanExecute" />
<CommandBinding Command="ApplicationCommands.New" CanExecute="CommandBinding_CanExecute"/>
<CommandBinding Command="ApplicationCommands.Save" CanExecute="CommandBinding_CanExecute"/>
<CommandBinding Command="ApplicationCommands.SaveAs" CanExecute="CommandBinding_CanExecute"/>
<CommandBinding Command="ApplicationCommands.Close" CanExecute="CommandBinding_CanExecute"/>
</ContextMenu.CommandBindings>
和
private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
//e.Handled = true;
}
应该可以解决问题。
我正在开发一个仅使用 Controls:Tiles
和属性 ContextMenu
的菜单栏,它只允许我单击鼠标右键打开它。经过一番搜索后,我使其可以用鼠标左键单击,但行为不同:当我按下右键单击时,ContextMenu
打开并且所有 MenuItems
都是可单击的。当我按下左键时,单击 ContextMenu
打开,但所有 MenuItems
看起来都已禁用,我无法单击它们。
我的代码在这里:
<Controls:Tile x:Name="FileTile" Width="Auto" Height="30" TitleFontSize="10" HorizontalContentAlignment="Left"
VerticalAlignment="Top" VerticalContentAlignment="Top" Background="White" HorizontalTitleAlignment="Right"
Foreground="Gray" ContextMenuService.IsEnabled="True">
<Controls:Tile.Content>
<StackPanel Orientation="Horizontal" Height="Auto">
<Image Source="/images/topbaricons/files.png" Width="22" Height="22" VerticalAlignment="Center" HorizontalAlignment="Left"/>
<TextBlock Text="{x:Static p:Resources.File}" VerticalAlignment="Center" Margin="5,0,5,0" />
</StackPanel>
</Controls:Tile.Content>
<Controls:Tile.Style>
<Style TargetType="{x:Type Button}">
<Style.Triggers>
<EventTrigger RoutedEvent="Click">
<EventTrigger.Actions>
<BeginStoryboard>
<Storyboard>
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="ContextMenu.IsOpen" FillBehavior="HoldEnd">
<DiscreteBooleanKeyFrame KeyTime="0:0:0" Value="True"/>
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger.Actions>
</EventTrigger>
</Style.Triggers>
</Style>
</Controls:Tile.Style>
<Controls:Tile.ContextMenu>
<ContextMenu x:Name="File_ContextMenu" >
<MenuItem Header="{x:Static p:Resources.Menu_item_New}" Command="ApplicationCommands.New" IsEnabled="true">
<MenuItem.Icon>
<Image Source="/images/topbaricons/new_file.png" Height="22" Width="22" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="{x:Static p:Resources.Menu_item_Open}" Command="ApplicationCommands.Open" IsEnabled="true">
<MenuItem.Icon>
<Image Source="/images/topbaricons/open_file.png" Height="22" Width="22" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="{x:Static p:Resources.Menu_item_Save}" x:Name="MenuItemSave" Command="ApplicationCommands.Save" IsEnabled="False">
<MenuItem.Icon>
<Image Source="/images/topbaricons/save.png" Height="22" Width="22" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Command="ApplicationCommands.SaveAs" Visibility="Visible" >
<MenuItem.Icon>
<Image Source="/images/topbaricons/save_as.png" Height="22" Width="22" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="{x:Static p:Resources.Menu_item_Exit}" Command="ApplicationCommands.Close" IsEnabled="true">
<MenuItem.Icon>
<Image Source="/images/topbaricons/off.png" Height="22" Width="22" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</Controls:Tile.ContextMenu>
</Controls:Tile>
为了准确显示我一直在谈论的差异 post 有这张图片:
有人可以帮助我吗?我真的很想用左键单击,就像用右键单击一样。
谢谢。
我想命令的 CanExecute
将在某处处理(也许当前关注的元素有自己的实现)。正在粘贴
<ContextMenu.CommandBindings>
<CommandBinding Command="ApplicationCommands.Open" CanExecute="CommandBinding_CanExecute" />
<CommandBinding Command="ApplicationCommands.New" CanExecute="CommandBinding_CanExecute"/>
<CommandBinding Command="ApplicationCommands.Save" CanExecute="CommandBinding_CanExecute"/>
<CommandBinding Command="ApplicationCommands.SaveAs" CanExecute="CommandBinding_CanExecute"/>
<CommandBinding Command="ApplicationCommands.Close" CanExecute="CommandBinding_CanExecute"/>
</ContextMenu.CommandBindings>
和
private void CommandBinding_CanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = true;
//e.Handled = true;
}
应该可以解决问题。