C#WPF MenuItem自定义模板自定义、模板、WPF、MenuItem

2023-09-03 14:27:07 作者:一个人唱情歌

在Main.xaml中,我有这两个菜单项:

第一个标题=从当前断开 第二个标题=退出 ... 具有不同标题文本的更多菜单项...

为了编辑第一个项目的一些颜色,我在App.xaml:

中创建了一个自定义模板
<!--Template for Menu Items-->
    <Style x:Key="MenuItemBaseStyle" TargetType="MenuItem">
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="true">
                <Setter Property="Background" Value="#0a99f3" />
                <Setter Property="Foreground" Value="White"/>
            </Trigger>
        </Style.Triggers>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type MenuItem}">
                    <Grid Background="{TemplateBinding Background}">
                        <MenuItem Header="DISCONNECT FROM CURRENT" />
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
WPF 数据绑定 分层数据模板

和Main.xaml中:

<MenuItem Header="CONNECTION">
    <MenuItem Style="{StaticResource MenuItemBaseStyle}" Header="DISCONNECT FROM CURRENT" />
    <MenuItem Header="QUIT"/>
</MenuItem>

现在我想对第二个菜单项执行相同的操作。问题出在不同的标题上。如果我从模板中删除页眉,它将不会显示任何页眉,即使页眉文本仍存在于Main.xaml

如何将此模板用于仅更改标题文本的多个菜单项?

推荐答案

您可以只对TemplateBinding属性使用TemplateBinding,就像在Background属性上使用它一样:

<ControlTemplate TargetType="{x:Type MenuItem}">
    <Grid Background="{TemplateBinding Background}">
         <MenuItem Header="{TemplateBinding Header}" />
    </Grid>
</ControlTemplate>