WPF 中的子菜单模板错误

阿比维尔玛

我正在使用标题菜单模板以及子菜单标题模板。主标题菜单运行良好,但子菜单不起作用。它不显示。

我的 Wpf XAML 代码(子菜单标题模板):

    <ControlTemplate x:Key="{x:Static MenuItem.SubmenuHeaderTemplateKey}"  TargetType="{x:Type MenuItem}">
        <Border x:Name="Border" BorderThickness="1">
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="Auto"    SharedSizeGroup="Icon" />
                    <ColumnDefinition Width="*" />
                    <ColumnDefinition Width="Auto"   SharedSizeGroup="Shortcut" />
                    <ColumnDefinition Width="13" />
                </Grid.ColumnDefinitions>
                <ContentPresenter x:Name="Icon"  Margin="6,0,6,0" VerticalAlignment="Center"  ContentSource="Icon" />
                <ContentPresenter x:Name="HeaderHost" Grid.Column="1" ContentSource="Header"  RecognizesAccessKey="True" />
                <TextBlock x:Name="InputGestureText"  Grid.Column="2" Text="{TemplateBinding InputGestureText}" Margin="5,2,2,2" DockPanel.Dock="Right" />
                <Path Grid.Column="3" HorizontalAlignment="Center" VerticalAlignment="Center" Data="M 0 0 L 0 7 L 4 3.5 Z">
                    <Path.Fill>
                        <SolidColorBrush Color="White"  />
                    </Path.Fill>
                </Path>
                <Popup x:Name="Popup" Placement="Right" HorizontalOffset="-4" IsOpen="{TemplateBinding IsSubmenuOpen}" AllowsTransparency="True" Focusable="False" PopupAnimation="Fade">
                    <Border x:Name="SubmenuBorder" SnapsToDevicePixels="True" Background="RoyalBlue"  BorderThickness="1">
                        <Border.BorderBrush>
                            <SolidColorBrush Color="RoyalBlue" />
                        </Border.BorderBrush>
                    </Border>
                </Popup>
            </Grid>
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="Icon" Value="{x:Null}">
                <Setter TargetName="Icon"   Property="Visibility"  Value="Collapsed" />
            </Trigger>
            <Trigger Property="IsHighlighted" Value="true">
                <Setter Property="Background" TargetName="Border">
                    <Setter.Value>
                        <LinearGradientBrush EndPoint="0.5,1"  StartPoint="0.5,0">
                            <GradientStop Color="Transparent" Offset="0" />
                            <GradientStop Color="DeepSkyBlue" Offset="1" />
                        </LinearGradientBrush>
                    </Setter.Value>
                </Setter>
                <Setter Property="BorderBrush" TargetName="Border">
                    <Setter.Value>
                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                            <GradientStop Color="DeepSkyBlue"   Offset="0" />
                            <GradientStop Color="Transparent"  Offset="1" />
                        </LinearGradientBrush>
                    </Setter.Value>
                </Setter>
            </Trigger>
            <Trigger SourceName="Popup" Property="AllowsTransparency" Value="True">
                <Setter TargetName="SubmenuBorder" Property="CornerRadius" Value="4" />
                <Setter TargetName="SubmenuBorder" Property="Padding" Value="0,3,0,3" />
            </Trigger>
            <Trigger Property="IsEnabled" Value="false">
                <Setter Property="Foreground">
                    <Setter.Value>
                        <SolidColorBrush Color="DeepPink" />
                    </Setter.Value>
                </Setter>
            </Trigger>
        </ControlTemplate.Triggers>
    </ControlTemplate>

申请设计:

 <Grid>
    <Menu Height="24" VerticalAlignment="Top" Style="{DynamicResource HiMicrosoft}">
        <MenuItem Header="Media" Width="48">
            <MenuItem Header="Open Files" Template="{DynamicResource MI }"/>
            <MenuItem Header="Open Folder" Template="{DynamicResource MI }"/>
            <MenuItem Header="Open Playlist" Template="{DynamicResource MI }"/>
            <MenuItem Header="Open Recent" Template="{DynamicResource MI }"/>
            <Separator Style="{DynamicResource {x:Static MenuItem.SeparatorStyleKey} }"/>
            <MenuItem Header="Hide" Template="{DynamicResource MI }"/>
            <MenuItem Header="Exit" Template="{DynamicResource MI }"/>
        </MenuItem>
        <MenuItem Header="Playback" >
            <MenuItem Header="Play/Pause" Template="{DynamicResource MI }"/>
            <MenuItem Header="Stop" Template="{DynamicResource MI }"/>
            <Separator Style="{DynamicResource {x:Static MenuItem.SeparatorStyleKey} }" />
            <MenuItem Header="Speed" Template="{DynamicResource MI }">
                <MenuItem  Header="Stop"  Template="{DynamicResource {x:Static MenuItem.SubmenuHeaderTemplateKey}}"/>
            </MenuItem>
        </MenuItem>
    </Menu>
</Grid>

这是最终输出屏幕截图: SS

当我点击速度时,它什么也没显示。我无法识别错误,或者可能是我使用了错误的方法。

任何帮助将不胜感激!

如果您愿意,我可以提供更多详细信息。只需在下面评论。

提前致谢!

埃蒙德·厄诺

我看到两个错误。首先,您为 SubmenuHeader 分配了错误的模板:

<MenuItem Header="Speed" Template="{DynamicResource MI }">
    <MenuItem Header="Stop"
              Template="{DynamicResource {x:Static MenuItem.SubmenuHeaderTemplateKey}}"/>
    </MenuItem>
</MenuItem>

我觉得应该是:

<MenuItem Header="Speed" Template="{DynamicResource {x:Static MenuItem.SubmenuHeaderTemplateKey}}">
    <MenuItem Header="Stop"
              Template="{DynamicResource MI }"/>
    </MenuItem>
</MenuItem>

第二:子菜单没有放置子菜单项的地方。在模板中,您需要类似以下内容。请注意带有 IsItemsHost 属性的堆栈面板。该属性指示应放置子菜单项的位置:

<Popup x:Name="Popup" 
       Placement="Right" 
       HorizontalOffset="-4" 
       IsOpen="{TemplateBinding IsSubmenuOpen}"
       AllowsTransparency="True" 
       Focusable="False" 
       PopupAnimation="Fade">
    <Border x:Name="SubmenuBorder"
            SnapsToDevicePixels="True"
            Background="RoyalBlue"
            BorderThickness="1"
            BorderBrush="RoyalBlue">
        <StackPanel IsItemsHost="True" />
    </Border>
</Popup>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

WPF子菜单位置

来自分类Dev

WPF中的继承模板

来自分类Dev

在C#WPF的子菜单中动态添加单选按钮

来自分类Dev

如何在WPF中创建垂直菜单并使子菜单位于菜单的右侧?

来自分类Dev

Symfony 3中的几个Knp菜单模板

来自分类Dev

SilverStripe Fluent菜单模板

来自分类Dev

WPF默认菜单

来自分类Dev

wpf 全屏隐藏菜单

来自分类Dev

WPF-如何使用绑定创建菜单和子菜单

来自分类Dev

数据网格模板[WPF]

来自分类Dev

数据网格模板[WPF]

来自分类Dev

使用哪个WPF模板?

来自分类Dev

WPF按钮控制模板

来自分类Dev

WPF ToggleButton模板BorderBrush

来自分类Dev

WPF中DataGridComboBoxColumn的ElementStyle错误

来自分类Dev

子WPF位于父WPF之上(MvvmCross)

来自分类Dev

在WPF中单击时更改菜单背景

来自分类Dev

在WPF中设置多个菜单的样式

来自分类Dev

WPF中的响应式菜单按钮

来自分类Dev

WPF菜单中的MenuItem图标消失

来自分类Dev

在 WPF 中实现“关于”菜单项

来自分类Dev

如何通过wpf中页面的上下文菜单创建子窗口?

来自分类Dev

在ListView数据模板WPF中绑定UserControl

来自分类Dev

WPF从代码中的模板获取元素

来自分类Dev

在WPF中更改窗口控件模板的内容

来自分类Dev

WPF:按钮模板中图像下的文本

来自分类Dev

将鼠标悬停在菜单项上时更改背景颜色,但无法在WPF中显示子菜单

来自分类Dev

WPF:DataGrid显示错误

来自分类Dev

XAML ComboBox错误WPF