Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf System.Windows.Controls.Ribbon的顶部边距(边框、空格)约为22px,为什么以及如何正确删除它?_Wpf_Xaml_Margin_Ribbon - Fatal编程技术网

Wpf System.Windows.Controls.Ribbon的顶部边距(边框、空格)约为22px,为什么以及如何正确删除它?

Wpf System.Windows.Controls.Ribbon的顶部边距(边框、空格)约为22px,为什么以及如何正确删除它?,wpf,xaml,margin,ribbon,Wpf,Xaml,Margin,Ribbon,这就是问题所在(红色箭头所示为不必要的边距): 这是它的实际XAML: <Ribbon DockPanel.Dock="Top"> (在我看来,这是一个可行的办法,但不是一个真正的解决方案): 使用补丁(对我来说,这更像是一种黑客行为): 为什么在功能区顶部有一个边距(边框/空格),以及如何在不使用hack的情况下正确删除该边距(边距-22对我来说是一个hack) 应用的解决方案(Ed Bayiates解决方案): <Ribbon DockPanel.Dock="

这就是问题所在(红色箭头所示为不必要的边距):

这是它的实际XAML:

<Ribbon DockPanel.Dock="Top">

(在我看来,这是一个可行的办法,但不是一个真正的解决方案):


使用补丁(对我来说,这更像是一种黑客行为):

为什么在功能区顶部有一个边距(边框/空格),以及如何在不使用hack的情况下正确删除该边距(边距-22对我来说是一个hack)

应用的解决方案(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);
    }
}

私有void RibbonSizeChanged(对象发送方,SizeChangedEventArgs e)
{
ContentPresenter titlePanel=MyRibbon.Template.FindName(“PART_TitleHost”,MyRibbon)作为ContentPresenter;
if(titlePanel!=null)
{
双滴定度=滴定板实际高度;
MyRibbon.Margin=新厚度(MyRibbon.Margin.Left,-titlehight,MyRibbon.Margin.Right,MyRibbon.Margin.Bottom);
}
}

我认为,如果您在RibbonWindow而不是标准窗口中设置主机,则所讨论的区域将塌陷到窗口标题栏中

如果你不能做到这一点,有三个项目,采取相同的22像素的空间在该地区。一个是PART_TitleHost。第二个是没有Name属性的DockPanel,第三个是没有Name属性的Border。除非你重新制作了整个丝带的模板,否则我认为你很难摆脱这些。但是,如果您将y边距设置为该区域的确切大小,则可以使您的黑客行为稍微少一些。在codebehind中,您可以获得标题栏的实际高度并重置ribbonbar的边距:

    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);
        }
    }
没有该代码的图像:

带有该代码的图像:


这是用于快速访问工具栏的空间吗?您是否使用WPF Snoop进行检查?不知道您在说什么,但我会尝试检查。Snoop是一个外部工具(有一个狗屎味的图标??),还是Visual Studio在正在调试的窗口顶部的相对新功能,或者其他什么?我使用了VS2019附带的实时可视化树。Ribbon有两个子项:“RibbonTab”和“StackPanel”。它们都没有覆盖我想要删除的区域(意外的边距)。狗图标一个。您可以高亮显示有问题的区域,并查看它是视觉树的哪一部分。从MSDN文章中的Xaml来看,我怀疑它是快速访问工具栏。您可能需要显式地为QAT设置一些0x0内容,以便在没有黑客攻击的情况下折叠该区域。这是标题栏面板。我认为您正在使用常规窗口作为主机,而不是RibbonWindow,这就是您看到额外空间的原因。因此,黑客攻击是有效的。我正在寻找一种隐藏标题栏的方法,但迄今为止没有成功。即使将其设置为“折叠”,由于边框没有模板零件名称,仍会增加空间。非常感谢。。。它工作得很好,在我看来,它是解决这个问题的一个更好的方法。注意:我在我的问题中写了如何修复它(灯光修改)。我将代码写入大小更改事件,以便与零件大小的任何未来更改(动态更改)保持一致。是的,这比我所做的更好,非常好:-)现在如果Windows样式更改或模板控件更改,您的应用程序仍然是正确的。
    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);
        }
    }