2012-04-20 105 views
1

我正在使用一個ListBox,項目模板是一個包含兩列的網格。每列需要佔用一半的可用空間。文本塊在包含星號的網格中不正確地包裝

如果其中一列中的文本變得太大,我需要它來包裝。

我用下面的代碼:

<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> 

此工作正常時,文字不長。如果文本太長,則第二列開始佔用儘可能多的空間,然後溢出屏幕。

我已經使用Hot Pink邊框來顯示下圖中每列的輪廓。 Grid Issue with Text Wrapping

有沒有辦法讓文本包裝工作在這種方式?

+0

嘗試使用Dock面板http://msdn.microsoft.com/en-us/library/system.windows.controls.dockpanel.aspx通過這種方式您的包裝TextBlock高度可能不止一行。也可以設置LastChildFill爲true。你的文件沒有被換行,因爲當你編寫它時,寬度不是固定的,而是由*引起的。您也可以使用MaxWidth。它必須被包裝然後。相反,你可以使用AcceptReturn true來接受輸入字符。希望可以幫助 – 2012-04-20 11:10:54

+1

http://stackoverflow.com/questions/1755266/size-a-textblock-to-a-button-that-c​​hanges-width-dynamically這對我來說,仔細使用這種行爲。 – 2012-04-20 12:12:57

回答

1

這是不可能的。您必須實施自己的面板,以確保可用空間始終均勻地分佈在控件之間,使用「測量」和「排列」替代方法。