1

テキストアイテムのリストが描画されるチャットウィンドウに似たウィンドウを取得しようとしています。ウィンドウはサイズ変更可能で、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を知ることができません。(リムショット)

4

1 に答える 1

4

ListView には独自の ScrollView が内部にあるため、ListView を ScrollViewer 内に配置する理由がわかりません。

MessageItems をラップするには、水平スクロールバーをオフにする必要があります。そうしないと、コンテナー (ListView または ScrollViewer) が MessageItem に必要なだけのスペースを与え、スクロールバーを表示します。

試す

<ScrollViewer ... ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>

<ListView ... ScrollViewer.HorizontalScrollBarVisibility="Disabled"/>

ScrollViewerが必要かどうかはわかりませんが。

ListView とユーザー コントロールの代わりに、ListBox と ItemTemplate を使用する方がよいでしょう。

于 2012-05-16T21:33:15.960 に答える