Я попробовал предложение здесь относительно растяжения, но у меня оно не сработало.
У меня есть 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 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
?