У меня проблема с дизайном пользовательского интерфейса, вот что я хочу, чтобы содержимое окна моего приложения уменьшалось, чтобы оно соответствовало наименьшему размеру окна.Какой элемент управления XAML следует использовать для сохранения всех дочерних элементов в своих границах в WPF?
Использование XAML ниже, когда окно слишком узкое, содержимое сокращается до соответствия. Отлично. Моя проблема в том случае, если окно слишком коротка, содержимое выпадать на дно, как это:
<ItemsControl ItemsSource="{Binding GroupStatsDisplayList}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Background="Red" Margin="5" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Viewbox Margin="4" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Width="Auto" Height="Auto" >
<ListBox>
<StackPanel Orientation="Horizontal" Margin="5" Background="Blue">
<Label Content="{Binding GroupID}" FontWeight="Bold"/>
<Label Content="{Binding GroupName}" Width="100" FontWeight="Bold" />
<Label Content="{Binding CallsInQueue}" FontWeight="Bold" />
<Label Content="{Binding TSF}" FontWeight="Bold" />
</StackPanel>
</ListBox>
</Viewbox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
Я прочитал в ответах на подобные вопросы, что ItemsControl использует StackPanel, как его по умолчанию ItemsPanel и что StackPanel делает вести себя так, как я вижу. Для решения таких проблем, как мой, была рекомендована сетка.
Так что я попытался рассказать свою ItemsControl использовать сетку:
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Grid Background="Red" Margin="5" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
лучше, потому что содержание этого размер при ограниченном в любом направлении. Хуже, потому что кажется, что есть только один элемент ViewBox-> ListBox, который обновляется последним элементом моей коллекции (я могу видеть три элемента цикла коллекции через дисплей при запуске приложения). Я не вижу всех элементов в моей коллекции на экране, только последний.
Я также читал, что DockPanel может спасти меня ...
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<DockPanel Background="Red" Margin="5" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
Это когда вещи сошли с ума, и я решил написать этот вопрос. Теперь все элементы в моей коллекции есть, но они появляются один за другим, когда я расширяю окно по горизонтали, каждый новый элемент появляется, поскольку существующие расширяются до вертикальной протяженности окна.
Как получить макет, который похож на первое изображение, но будет уменьшаться, чтобы соответствовать самому маленькому размеру окна?
Почему у вас есть ListBox в вашем DataTemplate, когда у вас есть только один жесткий код StackPanel? Это не имеет большого значения для меня. Кроме того, сетку нельзя использовать в качестве элемента ItemsPanel, потому что для этого вам потребуется предоставить динамическую сборку Grid/Col Definitions. Использование ViewBox - мой лучший совет. Но не в ItemTemplate, viewbox вокруг всего элемента управления. – dowhilefor
Почему у меня есть ListBox в моей DataTemplate? Две причины, по которым я полагаю: я просто изучаю XAML, и почти каждый учебник по привязке данных, который я видел, использует ListBox ...Я переместил свой ViewBox для хранения ItemsControl, удалил Grid из ItemsControl, и теперь он работает хорошо. Спасибо за это! Я не уверен, как принять ваш комментарий в качестве ответа ... –
Добавил мой комментарий в качестве ответа и дал несколько подробностей, почему я спросил о списке. – dowhilefor