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