繁体   English   中英

使用C#WPF在Fluent功能区中垂直居中的MenuItem文本

[英]Vertically Centering MenuItem text in a Fluent Ribbon with C# WPF

我正在使用Fluent.Ribbon ,我极力尝试垂直放置第二级菜单项的文本。 我实际上不介意使第二级具有与第一级项目相同的样式,如果那样会更容易。

通过仔细研究源代码,我认为我发现单独的样式是由ControlTemplate ApplicationMenuSecondLevelItemTemplate定义的。 但是,由于我正在学习WPF,因此我不确定如何用样式覆盖它。

我试过简单的解决方案,像这样一个刚刚使文本消失。

这篇文章中,我还尝试了所有选项。 但是,这些都不起作用,而当我将最后一个修复为以下错误以消除错误时,应用程序将崩溃。

<Style x:Key="CenteredTextMenuItem" TargetType="{x:Type MenuItem}">
    <Setter Property="HeaderTemplate">
        <Setter.Value>
            <DataTemplate>
                <TextBox Text="{Binding}" HorizontalAlignment="Stretch" 
                HorizontalContentAlignment="Center" FontSize="16" FontWeight="Bold"/>
            </DataTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="Height" Value="30"/>
    <Setter Property="Width" Value="188"/>
</Style>

如何使用Fluent.Ribbon控件将第二级MenuItem的文本Fluent.Ribbon

谢谢。

编辑:

这是一个图像,显示第二级如何不居中。

菜单截图

而且没有什么复杂的代码:

<Fluent:MenuItem Header="Print Invoice" Icon="NavIcons\Print_32.png" />

这是您问题的可能解决方案。

  1. 简单,但有点难看。

在代码后面的菜单项的Loaded事件中创建事件处理程序。

<Fluent:MenuItem Loaded="MenuItem_Loaded"/>

在此事件处理程序中,您可以手动找到控件模板部分并覆盖它们的外观:

private void MenuItem_Loaded(object sender, RoutedEventArgs e)
{
    Fluent.MenuItem menuItem = sender as Fluent.MenuItem;
    if (menuItem != null)
    {
        TextBlock textBlock = menuItem.Template.FindName("textBlockDesc", menuItem) as TextBlock;
        if (textBlock != null)
        {
            textBlock.Visibility = System.Windows.Visibility.Collapsed;
        }

        textBlock = menuItem.Template.FindName("textBlock", menuItem) as TextBlock;
        if (textBlock != null)
        {
            textBlock.VerticalAlignment = System.Windows.VerticalAlignment.Center;
        }
    }
}

这是一个不好的解决方案,不要那样做。 我刚刚展示了它,因此您可以了解如何根据需要访问模板部分。 这些字符串"textBlockDesc""textBlock"是在Fluent主题中定义的控制模板部分。

  1. 创建自己的样式和控件模板。

由于您不能继承控件模板,因此必须从Fluent主题复制它并将其放入资源中。 缺点是,如果要进行更新,则必须手动将该模板与原始模板重新同步。

我在这里不举一个例子,因为该解决方案也不是很好。

  1. 手动覆盖菜单项样式。

手动将菜单项的样式设置为“第一级”菜单项的样式。

<Fluent:MenuItem Style="{DynamicResource ApplicationMenuStyle}"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM