Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 将模板应用于菜单项时,单击时不再显示下拉列表_Wpf_Templates_Menuitem - Fatal编程技术网

Wpf 将模板应用于菜单项时,单击时不再显示下拉列表

Wpf 将模板应用于菜单项时,单击时不再显示下拉列表,wpf,templates,menuitem,Wpf,Templates,Menuitem,我有一个WPF菜单,我用控件模板设计了它的样式。然后,客户端希望对顶级导航项使用图像而不是文本 没问题,我为每个顶级项创建了一个控件模板,并在每个MenuItem上设置了我的template属性,以匹配下面的自定义模板。我有一个触发器,可以在翻滚时更改图像 我的问题是,当你点击菜单项时,应该有一个子菜单项,它们不再下拉 这些命令针对没有子项的顶级项激发。当我从菜单项中删除指定模板的代码时,我会看到下拉列表中的文本版本 我需要做什么才能保留基于图像的顶级菜单项和下拉列表 提前谢谢 <

我有一个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>