В моей программе у меня есть WrapPanel внутри окна просмотра. WrapPanel (который фактически является элементом ItemsPanelTemplate элемента ItemsControl) содержит некоторые связанные элементы, которые могут быть разных размеров.WPF WrapPanel В максимальном размере ViewBox
<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, чтобы элементы были обернуты в большее количество столбцов, если они слишком высоки, но это своего рода хакерский способ сделать это, и я нахожу для разных групп элементов, MaxHeight должен быть другой.
В качестве примера того, что я имею в виду под этим, представьте, что элементы, с которыми связан элемент ItemsControl, - это просто отображение каждой буквы в алфавите. Без какого-либо способа заставить элементы обернуть несколько столбцов, вы получите один действительно высокий столбец с действительно маленьким текстом, но если мы установим MaxHeight из WrapPanel, мы можем заставить элементы к нескольким столбцам, как это, и текст будет больше на экране:
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? Нужно ли мне создавать какую-то пользовательскую панель, чтобы получить то, что я хочу?
Спасибо за любую помощь вы можете предложить
Edit:
Для примера того, почему UniformGrid не будет работать, предположит, что я имел эти 5 пунктов (с каждой буквой, представляющей другой элемент)
A C E
A C E
A D E
B D E
с помощью UniformGrid всех элементов будет принимать размер элемента E и все это будет занимать намного больше места на экране.
Как насчет использования UniformGrid в качестве элемента ItemsPanel? Я * думаю *, который добавит строки и столбцы при добавлении элементов. –
Вы не сможете это сделать, это простой способ. Если панель просмотра находится внутри окна просмотра, ее никогда не придется переносить, потому что окно просмотра сжимает ее, чтобы она соответствовала. – Phil