C# WPF MenuItem 自定义模板

标签 c# wpf datatemplate menuitem

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

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

为了编辑第一个项目的一些颜色,我在 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>

在 Main.xaml 中:

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

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

如何将此模板用于许多菜单项,其中唯一改变的是标题文本?

最佳答案

你可以只使用 TemplateBindingHeader 上属性的使用方式与您在 Background 属性上使用它的方式相同:

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

关于C# WPF MenuItem 自定义模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24786479/

相关文章:

c# - 如果单击得太快,WPF Storyboard 动画会卡住

wpf - 创建使用 Windows 主题的边框

c# - WPF:绑定(bind) TreeView

c# - WPF 中的数据模板

c# - 在 ASP.NET Core 中使用 wkhtmltopdf、docker 将 HTML 转换为 PDF

c# - 具有第 4 维标记特殊值的 3D 表面着色

wpf - 如何将 DataTemplateSelector 与 DataGridBoundColumn 一起使用?

c# - 禁用 ListView 数据模板中的按钮

c# - 为什么一个程序集必须被引用两次?

c# - 使用 LINQ 从文件中读取文本数据