我在这里尝试了关于拉伸的建议,但它对我不起作用。
我有一个 TabItem,它承载一个 UserControl,它本质上只是一个带有 ItemsPanel 的 ListBox。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>
显示 StackPanelContents 的 ListBoxContainer XAML 如下所示:
<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
and Arrange
?