我使用带有按钮的上下文对。每当按下特殊按钮时,我都希望关闭ContextMenu。我看到了一种被称为" StayopenOnClick"的Menuitem的可能性。这很好。
这是我对按钮所需的。尤其是XAML只有解决方案,如果有人可以帮助您!
预先感谢。
您可以通过使用booleananimationingkeyframes对其同条属性进行动画效果来关闭上下文menu。这是唯一的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>
此解决方案有效,但是现在的上下文对我的ContextMenu中的所有按钮都关闭了。我只是希望只使用一个称为"设置"的按钮将其关闭。
在这种情况下,您可以将EventTrigger的Sourcename属性设置为X:"设置"按钮的名称:
<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>
我不完全确定您的追求,但这是一个带有按钮的上下文菜单:
<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的解决方案。)