我正在使用标题菜单模板以及子菜单标题模板。主标题菜单运行良好,但子菜单不起作用。它不显示。
我的 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>
当我点击速度时,它什么也没显示。我无法识别错误,或者可能是我使用了错误的方法。
任何帮助将不胜感激!
如果您愿意,我可以提供更多详细信息。只需在下面评论。
提前致谢!
我看到两个错误。首先,您为 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] 删除。
我来说两句