1

私は ListBox を使用しています。項目テンプレートは 2 つの列を持つグリッドです。各列は、使用可能なスペースの半分を占める必要があります。

これらの列のいずれかのテキストが大きくなりすぎた場合は、折り返す必要があります。

私は次のコードを使用しています:

<ListBox.ItemContainerStyle>
    <Style TargetType="ListBoxItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    </Style>
 </ListBox.ItemContainerStyle>
 <ListBox.ItemTemplate>
     <DataTemplate>
         <Grid>
             <Grid.ColumnDefinitions>
                  <ColumnDefinition Width="1*"/>
                  <ColumnDefinition Width="1*"/>
             </Grid.ColumnDefinitions>
                    <Border Grid.Column="0" BorderBrush="HotPink" BorderThickness="2">
                        <TextBlock Text="{Binding Title}"
                                   FontFamily="Arial" 
                                   FontSize="16"/>
                    </Border>
                    <Border Grid.Column="1" BorderBrush="HotPink" BorderThickness="2">
                        <TextBlock Text="{Binding Description}" 
                                   FontFamily="Arial" 
                                   FontSize="16" 
                                   TextWrapping="Wrap"/>
                    </Border>

                    </Grid>
            </DataTemplate>
        </ListBox.ItemTemplate>

これは、テキストが長くない場合にうまく機能します。テキストが長すぎると、2 番目の列ができるだけ多くのスペースを占有し始め、画面からはみ出します。

次の図では、ホット ピンクの境界線を使用して各列のアウトラインを示しています。 テキストの折り返しに関するグリッドの問題

このようにテキストの折り返しを機能させる方法はありますか?

4

1 に答える 1

1

これは不可能です。Measure および Arrange オーバーライド メソッドを使用して、使用可能なスペースがコントロール間で常に均等に分散されるように、独自のパネルを実装する必要があります。

于 2012-04-20T10:57:15.683 に答える