テキストアイテムのリストが描画されるチャットウィンドウに似たウィンドウを取得しようとしています。ウィンドウはサイズ変更可能で、1行に収まらない場合は各テキストアイテムを折り返す必要があります。
私がこれまでに持っているもの:
MessageItem
-ユーザーコントロール、境界線内の複数行のTextBlock
<Grid VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<Border BorderBrush="Silver" BorderThickness="1" Height="Auto" HorizontalAlignment="Left" Margin="0,10,0,10" Name="messageContainer" VerticalAlignment="Top" Width="Auto">
<TextBlock Height="Auto" HorizontalAlignment="Stretch" Margin="0" Name="messageContent" VerticalAlignment="Stretch" Width="Auto" Text="This is some longer text. Wow that wasn't as long as I thought." TextWrapping="Wrap" Padding="10" />
</Border>
</Grid>
MessageBox
-MessageItemsを保持するListViewを持つユーザーコントロール
<Grid Name="messageGrid" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<ScrollViewer VerticalScrollBarVisibility="Auto">
<!--<StackPanel Height="Auto" HorizontalAlignment="Stretch" Margin="0" Name="messagePanel" VerticalAlignment="Stretch" Width="Auto">
</StackPanel> -->
<ListView HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch">
<local:MessageItem></local:MessageItem>
</ListView>
</ScrollViewer>
</Grid>
問題:
コメントアウトされたStackPanelをMessageItemsの保持に使用すると、MessageItemが正しく縮小されます(テキストが折り返されます)。ListViewを使用すると、縮小しません。
私は研究から多かれ少なかれその理由を理解しましたが、それを回避する方法を理解することができませんでした。MeasureOverrideやArrangeOverrideをオーバーライドする必要があると私が言える限り、私はWPFに慣れていないため、自分が実行しているWTFを知ることができません。(リムショット)