Wpf 将模板应用于菜单项时,单击时不再显示下拉列表
我有一个WPF菜单,我用控件模板设计了它的样式。然后,客户端希望对顶级导航项使用图像而不是文本 没问题,我为每个顶级项创建了一个控件模板,并在每个MenuItem上设置了我的template属性,以匹配下面的自定义模板。我有一个触发器,可以在翻滚时更改图像 我的问题是,当你点击菜单项时,应该有一个子菜单项,它们不再下拉 这些命令针对没有子项的顶级项激发。当我从菜单项中删除指定模板的代码时,我会看到下拉列表中的文本版本 我需要做什么才能保留基于图像的顶级菜单项和下拉列表 提前谢谢Wpf 将模板应用于菜单项时,单击时不再显示下拉列表,wpf,templates,menuitem,Wpf,Templates,Menuitem,我有一个WPF菜单,我用控件模板设计了它的样式。然后,客户端希望对顶级导航项使用图像而不是文本 没问题,我为每个顶级项创建了一个控件模板,并在每个MenuItem上设置了我的template属性,以匹配下面的自定义模板。我有一个触发器,可以在翻滚时更改图像 我的问题是,当你点击菜单项时,应该有一个子菜单项,它们不再下拉 这些命令针对没有子项的顶级项激发。当我从菜单项中删除指定模板的代码时,我会看到下拉列表中的文本版本 我需要做什么才能保留基于图像的顶级菜单项和下拉列表 提前谢谢 <
<Menu Grid.Row="0" Grid.Column="0" Name="uxMenu" Margin="0 2 0 0">
<MenuItem Header="Home" Name="uxHome" Command="cmds:NavigationCommands.HomeViewNavigationCommand" Template="{DynamicResource HomeButtonTemplate}"/>
<MenuItem Header="Admin" Name="uxAdmin" Template="{DynamicResource MenuExitButtonTemplate}">
<MenuItem Header="_Setup">
<MenuItem Header="_Overview" Command="cmds:NavigationCommands.MenuAdminSetupOverviewNavigationCommand"/>
<MenuItem Header="_Cameras" Command="cmds:NavigationCommands.MenuAdminSetupCameraNavigationCommand" />
</MenuItem>
</MenuItem>
</Menu>
<ControlTemplate x:Key="HomeButtonTemplate" TargetType="{x:Type MenuItem}">
<Grid >
<Image x:Name="myimage" Source="/Images/Navigation/home_off.png" Width="100" Height="52" />
</Grid>
<ControlTemplate.Triggers >
<Trigger Property="Button.IsMouseOver" Value="True">
<Setter TargetName="myimage" Property="Source" Value="/Images/Navigation/home_on.png" />
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
回应H.B.的帖子
我确实有一大套控制模板,我目前正在使用它们来设置菜单的样式。所以,如果我想为每个顶级标题指定不同的控件模板,我必须为每个标题指定一组全新的控件模板
我不确定要使用的确切语法,尤其是x:Key和TargetType属性
比如说。我的TopLevelHeader和SubMonuHeader控件模板的当前代码如下所示。(从您引用的“menutemplatingpage”中复制)
因此,如果我用“HomeButtonTemplate”键添加我的新控件模板,如我的文章顶部所示,我将不得不添加一个新的部分(以及所有其他控件模板,如SubnumItem等)
这些新的控件模板如何知道它们属于同一组控件模板?我觉得我问得不对
感谢您提供的任何建议。如果您通过指定自己的模板来完全删除现有模板(这相当复杂),则您的模板不再提供必要的功能。控件模板中有一个用名称
part\u Popup
标识的部分,用于显示子项
检查链接(默认WPF主题
),从中可以下载包含模板的默认样式,以查看模板的外观
另外,请看一下,这会让您了解菜单模板的复杂程度。这可能有点晚了,但我最近遇到了同样的问题。 对我来说,成功的是创建了这样一个StackPanel
<StackPanel ClipToBounds="True"
Orientation="Horizontal"
IsItemsHost="True" />
谢谢,H.B.我确实有一大套控件模板,我目前正在使用这些模板来设置菜单的样式。我想我希望通过明确指定特定菜单项的模板,我只会更改这一项的模板,其余的将继续使用现有的控件模板。
<StackPanel ClipToBounds="True"
Orientation="Horizontal"
IsItemsHost="True" />
<ControlTemplate TargetType="Menu">
<Border Background="{TemplateBinding Background}"
BorderBrush="#252525"
BorderThickness="1"
CornerRadius="5">
<StackPanel ClipToBounds="True"
Orientation="Horizontal"
IsItemsHost="True" />
</Border>
</ControlTemplate>