我正在尝试使用XAML(仅限,没有代码隐藏)来调出按钮的ContextMenu。
我在这里有我的按钮
<Button x:Name="btn" Style="{StaticResource mybutton}" >
<Button.ContextMenu>
<ContextMenu>
<TextBlock Text="Information"/>
</ContextMenu>
</Button.ContextMenu>
</Button>
此处按钮的样式
<Style TargetType="{x:Type Button}" x:Key="mybutton">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="ContextMenu.IsOpen" Value="True"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
我的google-fu让我失望了,这似乎是一个简单的解决方案。我真的更愿意避免使用代码隐藏(MouseEnter / MouseLeave事件)。
提前谢谢。
答案 0 :(得分:2)
尝试在ControlTemplate中为ContextMenu应用“Setter”,方法是在“TargetName”属性中提供它的名称。例如:
<Button Width="100" Height="100" x:Name="btn">
<Button.Style>
<Style TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border CornerRadius="2" BorderThickness="3" BorderBrush="DarkGray" x:Name="border">
<Border.ContextMenu>
<ContextMenu x:Name="cmenu">
<TextBlock>Information</TextBlock>
</ContextMenu>
</Border.ContextMenu>
</Border>
<ControlTemplate.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="ContextMenu.IsOpen" Value="True" TargetName="cmenu"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Button.Style>
答案 1 :(得分:0)
这就是你想要的 - 我猜 - http://social.msdn.microsoft.com/forums/en-US/wpf/thread/adafe007-9637-4f28-8366-8f14ead2bd75
All you need to do is capture the mouse event that you want to trigger the context menu.
答案 2 :(得分:0)
最好在代码隐藏中使用mouse_up事件。使用MouseOver
时,当鼠标移至某个条目时,上下文菜单消失了,用户会觉得很愚蠢。
在VB中,代码如下:
Private Sub image_MouseUp(sender As Object, e As MouseButtonEventArgs) Handles image.MouseUp
anyControl.ContextMenu.IsOpen = Not OrteListBox.ContextMenu.IsOpen
End Sub
anyCountrol
代表发送者或其他任何保存ContextMenu
的控件