Wpf 如何使自定义按钮显示菜单
我在WPF中有一个自定义按钮,出于风格原因,我想将其用作我的主菜单按钮。我正在尝试创建一个类似于的菜单。我已将菜单项添加到按钮,但单击按钮时菜单不会打开。事实上,我得到一个编译器错误,它说Wpf 如何使自定义按钮显示菜单,wpf,button,drop-down-menu,Wpf,Button,Drop Down Menu,我在WPF中有一个自定义按钮,出于风格原因,我想将其用作我的主菜单按钮。我正在尝试创建一个类似于的菜单。我已将菜单项添加到按钮,但单击按钮时菜单不会打开。事实上,我得到一个编译器错误,它说内容被设置了太多次。我想这可能与我的形象有关。我还需要在我的按钮中添加或更改哪些代码,使其在单击时真正打开菜单,无错误 这是我现在按钮下的内容: <!--- MAIN MENU BUTTON --> <Button Width="50" Height="50"
内容
被设置了太多次。我想这可能与我的形象有关。我还需要在我的按钮中添加或更改哪些代码,使其在单击时真正打开菜单,无错误
这是我现在按钮下的内容:
<!--- MAIN MENU BUTTON -->
<Button Width="50"
Height="50" HorizontalAlignment="Left" Margin="12,12,0,0" VerticalAlignment="Top">
<!--- MAIN MENU BUTTON IMAGE -->
<Button.Content>
<StackPanel Orientation="Horizontal">
<Image
Source="..."
Width="40"
Height="40" />
</StackPanel>
</Button.Content>
<!-- MENU COMMAND -->
<Menu>
<MenuItem x:Name="MainMenu">
<MenuItem Header="New" />
<MenuItem Header="Open" />
<MenuItem Header="Exit" Click="Exit_Click" />
</MenuItem>
</Menu>
</Button>
我读过一些关于绑定的例子,但我不确定在这个特定的实例中如何实现绑定
谢谢。您可以使用RoutedEvent按钮。单击
,以显示上下文菜单
:
<Button Name="MainButton" Content="Button with ContextMenu" Width="150" Height="30">
<Button.ContextMenu>
<ContextMenu x:Name="MainContextMenu" PlacementRectangle="{Binding RelativeSource={RelativeSource Self}}">
<MenuItem Header="Main">
<MenuItem Header="Find" />
<MenuItem Header="Add" />
<MenuItem Header="View" />
<MenuItem Header="Edit" />
</MenuItem>
</ContextMenu>
</Button.ContextMenu>
<Button.Triggers>
<EventTrigger SourceName="MainButton" RoutedEvent="Button.Click">
<BeginStoryboard>
<Storyboard>
<ObjectAnimationUsingKeyFrames Storyboard.TargetName="MainContextMenu" Storyboard.TargetProperty="(ContextMenu.IsOpen)">
<DiscreteObjectKeyFrame KeyTime="0:0:0">
<DiscreteObjectKeyFrame.Value>
<sys:Boolean>True</sys:Boolean>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Button.Triggers>
</Button>
到您的窗口
:
<Window x:Class="ShowContextMenu.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525" .../>
您确定不想要菜单项吗?是的,我肯定。我知道如何使用这些。我想让我的按钮充当菜单项。编辑:我明白你的意思。我已将代码从ContextMenu
更改为MenuItem
。我现在遇到的唯一问题是编译器错误,因为显然MenuItem
与
不兼容。我更改了代码,这是一个愚蠢的错误。在您的情况下,菜单
不在堆栈面板中,因此您会得到一个错误。在内容中,如果包含多个元素,则它们必须全部位于面板中(StackPanel
,Grid
,等等)。但是为什么我的答案不适合你呢?好吧,这有点接近了。我从没说过这不合适。我只是觉得它和ContextMenu的关系比MenuItems的关系要大一点。看起来我是无意中开始尝试设置ContextMenu。我得到的“sys”是一个未声明的命名空间。XML无效。“以及“未找到类型'sys:Boolean'。请验证您是否缺少程序集引用…”好的,唯一的问题是,一旦我打开菜单并单击其他地方,“Main”框将保持打开状态。对我来说,工作标准。单击上下文菜单的外部
将其关闭。对我来说,它不会关闭,甚至在切换窗口时保持打开状态。您使用我的示例创建了一个空项目,还是定义了其他内容?
<Window x:Class="ShowContextMenu.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525" .../>