<Style x:Key="WorkspaceItemStyle" TargetType="{x:Type MenuItem}"> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type MenuItem}"> <Border Name="bg" Height="30" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}"> <Grid Margin="5" HorizontalAlignment="Stretch"> <Grid.ColumnDefinitions> <ColumnDefinition Width="30" /> <ColumnDefinition /> </Grid.ColumnDefinitions> <svg:SvgViewbox Width="16" Height="16" Margin="4,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center" Source="{Binding Icon, RelativeSource={RelativeSource TemplatedParent}}" /> <TextBlock x:Name="_txt" Grid.Column="1" Margin="0,0,15,0" VerticalAlignment="Center" Foreground="Black" Text="{Binding Header, RelativeSource={RelativeSource TemplatedParent}}" /> </Grid> </Border> <ControlTemplate.Triggers> <Trigger Property="IsMouseOver" Value="true"> <Setter TargetName="bg" Property="Background" Value="#e6eaf2" /> <Setter Property="IsSubmenuOpen" Value="True" /> </Trigger> <Trigger Property="IsEnabled" Value="False"> <Setter Property="Opacity" Value="0.6" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> </Style>为什么这个样式没有让MenuItem的子菜单展开
时间: 2023-08-05 10:10:50 浏览: 130
从提供的样式代码来看,你已经将 IsSubmenuOpen 属性的值设置为 True,但是这并不足以让子菜单展开。在 WPF 中,要让 MenuItem 的子菜单展开,需要使用 Menu 控件,并在其中定义 MenuItem 的层次结构。
在你的样式中,你只是定义了 MenuItem 的外观,但没有提供子菜单的逻辑。你需要在 Menu 控件中使用你的样式,并在其中定义 MenuItem 的层次结构,才能实现子菜单的展开。
以下是一个示例,演示如何使用你提供的样式来创建具有子菜单的 MenuItem:
```xml
<Menu>
<MenuItem Header="File" Style="{StaticResource WorkspaceItemStyle}">
<MenuItem Header="New" />
<MenuItem Header="Open" />
<MenuItem Header="Save" />
</MenuItem>
<MenuItem Header="Edit" Style="{StaticResource WorkspaceItemStyle}">
<MenuItem Header="Cut" />
<MenuItem Header="Copy" />
<MenuItem Header="Paste" />
</MenuItem>
</Menu>
```
上述示例中,我们将样式应用于 Menu 控件中的每个 MenuItem。每个 MenuItem 都有一个 Header 属性来显示文本内容,并且可以包含其他 MenuItem 作为子菜单。当鼠标悬浮在 MenuItem 上时,样式中的触发器将会改变背景颜色,并且由于子菜单的逻辑已经由 Menu 控件处理,所以不需要手动设置 IsSubmenuOpen 属性。
请注意,样式只定义了外观,子菜单的内容和逻辑需要在代码中进行定义。
阅读全文