WPF中工具栏中控件之间的动态间距

WPF中工具栏中控件之间的动态间距,wpf,toolbar,Wpf,Toolbar,我有一个包含几个控件的工具栏,比如10个 我想把最后三个控件放在工具栏的右角,在这三个控件和其余控件之间留出一些空间 当我调整窗口大小,它应该减少空间,一旦没有空间,它应该被剪辑到溢出下拉一个接一个 注意:我只需要使用一个工具栏。我以前做过一次 这些项目存在于定制的ScrollViewer中,因此它们可以离开屏幕,而ScrollViewer的SizeChanged事件将检查每个项目是否离开屏幕。如果该项不可见或部分可见,则该项将被隐藏,数据对象将被添加到菜单中。如果该项可见,它将从菜单中删除它(

我有一个包含几个控件的工具栏,比如10个

我想把最后三个控件放在工具栏的右角,在这三个控件和其余控件之间留出一些空间

当我调整窗口大小,它应该减少空间,一旦没有空间,它应该被剪辑到溢出下拉一个接一个

注意:我只需要使用一个工具栏。

我以前做过一次

这些项目存在于定制的
ScrollViewer
中,因此它们可以离开屏幕,而
ScrollViewer
SizeChanged
事件将检查每个项目是否离开屏幕。如果该项不可见或部分可见,则该项将被隐藏,数据对象将被添加到
菜单中。如果该项可见,它将从
菜单中删除它(如果它存在),并将其设置为可见。
菜单
只有在有项目时才可见

这是在我还是WPF新手的时候做的,所以我相信这个过程可以改进

下面列出了我用来确定项目可见性的帮助器类

public static ControlVisibility IsObjectVisibleInContainer(FrameworkElement child, UIElement parent)
{
    GeneralTransform childTransform = child.TransformToAncestor(parent);
    Rect childSize = childTransform.TransformBounds(new Rect(new Point(0, 0), new Point(child.Width, child.Height)));

    Rect result = Rect.Intersect(new Rect(new Point(0, 0), parent.RenderSize), childSize);
    if (result == Rect.Empty)
    {
        return ControlVisibility.Hidden;
    }
    else if (result.Height == childSize.Height && result.Width == childSize.Width)
    {
        return ControlVisibility.Full;
    }
    else if (result.Height == childSize.Height)
    {
        return ControlVisibility.FullHeightPartialWidth;
    }
    else if (result.Width == childSize.Width)
    {
        return ControlVisibility.FullWidthPartialHeight;
    }
    else
    {
        return ControlVisibility.Partial;
    }
}

public enum ControlVisibility
{
    Hidden,
    Partial,
    Full,
    FullHeightPartialWidth,
    FullWidthPartialHeight
}
它可以这样使用:

ControlVisibility itemVisibility = 
    MyHelpers.IsObjectVisibleInContainer(someItem, parentContainer);

“还有别的方法吗?”赛义德我肯定有,但我就是这样做的。