ここでストレッチに関する提案を試しましたが、うまくいきませんでした。
基本的にItemsPanelを備えた単なるリストボックスであるUserControlをホストするTabItemがあります。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を表示するListBoxContainerXAMLは次のようになります。
<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>
また、StackPanelContentsUserControlは次のようになります。
<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
ますか?