ContextMenu 中的 WPF 按钮需要 StaysOpenOnClick
WPF Button in ContextMenu needs StaysOpenOnClick
我使用了一个带有按钮的上下文菜单。
每当按下特殊按钮时,我都希望关闭 ContextMenu。
我看到了一个名为 "StaysOpenOnClick".. 的 MenuItem 的可能性。这工作得很好。
这就是我需要的 Button.. 特别是 XAML 唯一的解决方案,如果有人能提供帮助,那就太好了!
提前致谢。
我不完全确定你想要什么,但这是一个带有按钮的上下文菜单:
<TextBlock
Text="Hello, world!">
<TextBlock.ContextMenu>
<ContextMenu x:Name="contextMenu">
<MenuItem>
<MenuItem.Header>
<Button Content="MyButton" Click="OnMenuButtonClick" />
</MenuItem.Header>
</MenuItem>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
如果按如下方式处理按钮单击,它将关闭上下文菜单:
private void OnMenuButtonClick(object sender, RoutedEventArgs e)
{
contextMenu.IsOpen = false;
}
(但不是 XAML 唯一的解决方案。)
您可以通过使用 BooleanAnimationUsingKeyFrames 设置 IsOpen 属性 动画来关闭 ContextMenu。这是 XAML 唯一的解决方案:
<Grid Background="Yellow" Width="50" Height="50">
<Grid.Resources>
<Storyboard x:Key="sb">
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsOpen">
<DiscreteBooleanKeyFrame KeyTime="0" Value="False" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</Grid.Resources>
<Grid.ContextMenu>
<ContextMenu x:Name="contextMenu">
<MenuItem>
<MenuItem.Header>
<Button Content="TheButton" Click="OnButtonClick" />
</MenuItem.Header>
</MenuItem>
<ContextMenu.Triggers>
<EventTrigger RoutedEvent="ButtonBase.Click">
<BeginStoryboard Storyboard="{StaticResource sb}" />
</EventTrigger>
</ContextMenu.Triggers>
</ContextMenu>
</Grid.ContextMenu>
</Grid>
This solution works, but the ContextMenu now gets closed for all buttons in my ContextMenu. I just wanted it to be closed with only one button called "Settings".
在这种情况下,您可以将 EventTrigger 的 SourceName 属性 设置为 "Settings" 按钮的 x:Name:
<Grid Background="Yellow" Width="50" Height="50">
<Grid.Resources>
<Storyboard x:Key="sb">
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsOpen">
<DiscreteBooleanKeyFrame KeyTime="0" Value="False" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</Grid.Resources>
<Grid.ContextMenu>
<ContextMenu x:Name="contextMenu">
<MenuItem>
<MenuItem.Header>
<Button Content="Settings" x:Name="settingsButton" />
</MenuItem.Header>
</MenuItem>
<MenuItem>
<MenuItem.Header>
<Button Content="About" />
</MenuItem.Header>
</MenuItem>
<ContextMenu.Triggers>
<EventTrigger RoutedEvent="ButtonBase.Click" SourceName="settingsButton">
<BeginStoryboard Storyboard="{StaticResource sb}" />
</EventTrigger>
</ContextMenu.Triggers>
</ContextMenu>
</Grid.ContextMenu>
</Grid>
我使用了一个带有按钮的上下文菜单。 每当按下特殊按钮时,我都希望关闭 ContextMenu。 我看到了一个名为 "StaysOpenOnClick".. 的 MenuItem 的可能性。这工作得很好。
这就是我需要的 Button.. 特别是 XAML 唯一的解决方案,如果有人能提供帮助,那就太好了!
提前致谢。
我不完全确定你想要什么,但这是一个带有按钮的上下文菜单:
<TextBlock
Text="Hello, world!">
<TextBlock.ContextMenu>
<ContextMenu x:Name="contextMenu">
<MenuItem>
<MenuItem.Header>
<Button Content="MyButton" Click="OnMenuButtonClick" />
</MenuItem.Header>
</MenuItem>
</ContextMenu>
</TextBlock.ContextMenu>
</TextBlock>
如果按如下方式处理按钮单击,它将关闭上下文菜单:
private void OnMenuButtonClick(object sender, RoutedEventArgs e)
{
contextMenu.IsOpen = false;
}
(但不是 XAML 唯一的解决方案。)
您可以通过使用 BooleanAnimationUsingKeyFrames 设置 IsOpen 属性 动画来关闭 ContextMenu。这是 XAML 唯一的解决方案:
<Grid Background="Yellow" Width="50" Height="50">
<Grid.Resources>
<Storyboard x:Key="sb">
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsOpen">
<DiscreteBooleanKeyFrame KeyTime="0" Value="False" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</Grid.Resources>
<Grid.ContextMenu>
<ContextMenu x:Name="contextMenu">
<MenuItem>
<MenuItem.Header>
<Button Content="TheButton" Click="OnButtonClick" />
</MenuItem.Header>
</MenuItem>
<ContextMenu.Triggers>
<EventTrigger RoutedEvent="ButtonBase.Click">
<BeginStoryboard Storyboard="{StaticResource sb}" />
</EventTrigger>
</ContextMenu.Triggers>
</ContextMenu>
</Grid.ContextMenu>
</Grid>
This solution works, but the ContextMenu now gets closed for all buttons in my ContextMenu. I just wanted it to be closed with only one button called "Settings".
在这种情况下,您可以将 EventTrigger 的 SourceName 属性 设置为 "Settings" 按钮的 x:Name:
<Grid Background="Yellow" Width="50" Height="50">
<Grid.Resources>
<Storyboard x:Key="sb">
<BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsOpen">
<DiscreteBooleanKeyFrame KeyTime="0" Value="False" />
</BooleanAnimationUsingKeyFrames>
</Storyboard>
</Grid.Resources>
<Grid.ContextMenu>
<ContextMenu x:Name="contextMenu">
<MenuItem>
<MenuItem.Header>
<Button Content="Settings" x:Name="settingsButton" />
</MenuItem.Header>
</MenuItem>
<MenuItem>
<MenuItem.Header>
<Button Content="About" />
</MenuItem.Header>
</MenuItem>
<ContextMenu.Triggers>
<EventTrigger RoutedEvent="ButtonBase.Click" SourceName="settingsButton">
<BeginStoryboard Storyboard="{StaticResource sb}" />
</EventTrigger>
</ContextMenu.Triggers>
</ContextMenu>
</Grid.ContextMenu>
</Grid>