gpt4 book ai didi

WPF WrapPanel 在 ViewBox 中的最大尺寸

转载 作者:行者123 更新时间:2023-12-05 05:28:29 26 4
gpt4 key购买 nike

在我的程序中,我在 View 框内有一个 WrapPanel。 WrapPanel(实际上是 ItemsControl 的 ItemsPanelTemplate)包含一些可以是不同大小的绑定(bind)项。

<Viewbox Name="ViewWindow" Margin="10">
<Grid>
<ItemsControl ItemsSource="{Binding Path=Items}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Vertical" MaxHeight="600"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>

所有这一切的目标是我希望所有项目的大小都适合单个屏幕。 Viewbox 通过缩放内容来处理这个问题,使它们都适合。 WrapPanel 中的每个项目都是用户定义的文本,因此它们的大小都可以不同。我试图用 WrapPanel 完成的是屏幕上的结果文本将尽可能大。我一直在通过设置 WrapPanel MaxHeight 来做到这一点,这样如果项目太高,它们就会被包裹到更多的列中,但这是一种 hacky 方法,我发现对于不同的项目组,MaxHeight 需要不同。

作为我的意思的一个例子,假设 ItemsControl 绑定(bind)到的 Items 只是显示字母表中的每个字母。如果没有任何方法强制项目换行到多列,你最终会得到一个非常高的列和非常小的文本,但是如果我们设置 WrapPanel 的 MaxHeight 那么我们可以像这样强制项目到多列并且文本会在屏幕上变大:

A    F    K    P    U    Z
B G L Q V
C H M R W
D I N S X
E J O T Y

我是不是做错了?有没有比 WrapPanel 更好用的控件?我是否需要创建某种自定义面板才能获得我想要的内容?

感谢您提供的任何帮助

编辑:

举个 UniformGrid 不起作用的例子,假设我有这 5 个项目(每个字母代表一个不同的项目)

A    C    E
A C E
A D E
B D E

使用 UniformGrid,所有项目都将占用项目 E 的大小,并且它们将在屏幕上占用更多空间。

最佳答案

这是否实现了您正在尝试做的事情:

        <ItemsControl ItemsSource="{Binding Path=Items}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid IsItemsHost="True"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>

使用您的示例字母表,我将其布局如下:

A B C D E F
G H I J K L
M N O P Q R
S T U V W X
Y Z

现在,如果将它们按列而不是按行排列对您来说真的很重要,那么这就有点棘手了。这是按列排列它们的一种非常 hacky 的方法:

<ItemsControl ItemsSource="{Binding Path=Items}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid IsItemsHost="True"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding}">
<TextBlock.LayoutTransform>
<TransformGroup>
<ScaleTransform ScaleX="-1"/>
<RotateTransform Angle="-90"/>
</TransformGroup>
</TextBlock.LayoutTransform>
</TextBlock>
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.LayoutTransform>
<TransformGroup>
<ScaleTransform ScaleX="-1"/>
<RotateTransform Angle="-90"/>
</TransformGroup>
</ItemsControl.LayoutTransform>
</ItemsControl>

认为您不能告诉一个统一的网格先排列列。

关于WPF WrapPanel 在 ViewBox 中的最大尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10047467/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com