System.Windows.Controls.Ribbon的顶部有一个22px左右的边距(边框、空格),为什么,如何正确去除?

这就是问题所在(红色箭头所示的不需要的边距)。

enter image description here

这是实际的XAML。

<Ribbon DockPanel.Dock="Top">

这是补丁 (在我看来,这是一个工作,但一个黑客,而不是一个真正的解决方案)。

<Ribbon DockPanel.Dock="Top" Margin="0, -22, 0, 0">

有了补丁(对我来说更多的是黑客攻击)。

enter image description here

为什么在Ribbon的顶部有一个边框(边框空间),以及如何在不被黑客攻击的情况下正确地删除这个边框(对我来说,边框-22是一个黑客)?

应用了解决方案(Ed Bayiates解决方案)。

<Ribbon DockPanel.Dock="Top" x:Name="MyRibbon" SizeChanged="RibbonSizeChanged">

private void RibbonSizeChanged(object sender, SizeChangedEventArgs e)
{
    ContentPresenter titlePanel = MyRibbon.Template.FindName("PART_TitleHost", MyRibbon) as ContentPresenter;
    if (titlePanel != null)
    {
        double titleHeight = titlePanel.ActualHeight;
        MyRibbon.Margin = new Thickness(MyRibbon.Margin.Left, -titleHeight, MyRibbon.Margin.Right, MyRibbon.Margin.Bottom);
    }
}

解决方案:

我想如果你在RibbonWindow而不是标准的Window中托管,问题区域会折叠到Window的标题栏中。

如果你不能做到这一点,有三个项目在该区域占据了同样的22像素空间。 一个是PART_TitleHost。 第二个是没有Name属性的DockPanel,第三个是没有Name属性的Border。 除非你把整个Ribbon重新模板化,否则我认为你不可能轻易地摆脱这些。 然而,如果你把y-margin设置成这个区域的精确大小,你可以让你的hacky少一点。 在后面的代码中,你可以得到标题栏的实际高度,并重新设置Ribbon栏的边距。

    private void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {
        ContentPresenter titlePanel = Ribbon.Template.FindName("PART_TitleHost", Ribbon) as ContentPresenter;
        if (titlePanel != null)
        {
            double titleHeight = titlePanel.ActualHeight;
            Ribbon.Margin = new Thickness(Ribbon.Margin.Left, -titleHeight, Ribbon.Margin.Right, Ribbon.Margin.Bottom);
        }
    }

图片 该代码。

enter image description here

图片 该代码。

enter image description here

给TA打赏
共{{data.count}}人
人已打赏
解决方案

对象没有属性'split()' Python

2022-4-21 3:00:09

解决方案

在尝试启动React后出现错误(可能是项目依赖树有问题......)。

2022-4-21 3:00:11

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索