Я попробовал предложение here относительно растяжки, но это не сработало для меня.Проблемы с получением содержимого ListBox для его изменения размера
У меня есть TabItem, в котором размещается UserControl, который по существу является только ListBox с помощью ItemsPanel. Элемент ItemsPanel заставляет ListBox отображать его содержимое по горизонтали. Содержимое ListBox представляет собой привязку данных к ObservableCollection<StackPanelContents>
, что является еще одним UserControl. StackPanelContents
сам по себе просто содержит List
объектов с некоторым визуальным представлением (они содержат UIElement для визуализации).
В целом код работает правильно, поскольку он отображает все данные, которые я содержал в ObservableCollection
, но проблема в том, что элементы не изменяются при увеличении или уменьшении окна.
Вот краткий обзор того, что иерархия классов выглядит следующим образом:
И вот результаты:
Часть XAML для главного окна просто имеет TabControl и TabItem:
<Window x:Class="ResizeStackPanelInListBox.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<TabControl>
<TabItem Header="Test" x:Name="MyTabItem">
<!-- contents are set in code behind -->
</TabItem>
</TabControl>
</Window>
ListBoxContainer XAML, который отображает StackPanelContents выглядит следующим образом:
<UserControl x:Class="ResizeStackPanelInListBox.ListBoxContainer"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="Auto" Width="Auto">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"></RowDefinition>
<RowDefinition Height="Auto"></RowDefinition>
</Grid.RowDefinitions>
<TextBlock>ListBox with StackPanels as its ListBoxItems:</TextBlock>
<ListBox Grid.Row="1" ItemsSource="{Binding StackPanels}" HorizontalContentAlignment="Stretch">
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal" Width="Auto" Height="Auto" />
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>
</Grid>
</UserControl>
И StackPanelContents UserControl выглядит следующим образом:
<UserControl x:Class="ResizeStackPanelInListBox.StackPanelContents"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="Auto" Width="Auto">
<StackPanel>
<TextBlock Text="StackPanel"></TextBlock>
<StackPanel x:Name="MyStackPanel">
</StackPanel>
</StackPanel>
</UserControl>
Может кто-нибудь объяснить, почему это не изменение размера автоматически, и как я могу Подумайте об этом? Должен ли я написать свою собственную панель, чтобы справиться с этим, и использовать MeasureOverride
и Arrange
?
Возможный дубликат [Проблемы форматирования WPF - автоматическое растяжение и изменение размера?] (Http://stackoverflow.com/questions/2853148/wpf-formatting-issues-automatically-stretching-and-resizing) – Dave