2009-11-29 19 views
4

我想要在Grid中顯示一些text data,它有三列,中間列的寬度是其他兩列的兩倍,佔用整個網格的寬度。 text很長,需要打包。我無法工作(從過去的其他查詢中,我發現其他人也遇到過類似的問題)正在使用自動換行和調整網格大小來工作。我所擁有的是:文字環繞,網格和明星大小調整

<Window.Resources> 
    <local:DTData x:Key="dtData" /> 
</Window.Resources> 

<StackPanel DataContext="{StaticResource dtData}"> 
    <ListBox ItemsSource="{Binding}" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
     <Grid> 
      <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="2*"/> 
      <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <Border x:Name="a" Grid.Column="0" Margin="4"/> 
      <TextBlock Margin="4" Grid.Column="0" TextWrapping="Wrap" 
        Text="{Binding A}" Width="{Binding ActualWidth, ElementName=a }" MinWidth="100"/> 
      <Border x:Name="b" Grid.Column="1" Margin="4"/> 
      <TextBlock Margin="4" Grid.Column="1" TextWrapping="Wrap" 
        Text="{Binding B}" Width="{Binding ActualWidth, ElementName=b }" MinWidth="100"/> 
      <Border x:Name="c" Grid.Column="2" Margin="4"/> 
      <TextBlock Margin="4" Grid.Column="2" TextWrapping="Wrap" 
        Text="{Binding C}" Width="{Binding ActualWidth, ElementName=b }" MinWidth="100"/> 
     </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    </ListBox> 
</StackPanel> 

它使用從WPF TextBox and Scroll behaviorBorder招迫使文本換工作,但列的寬度或者是設定的最小寬度或最長的單詞,如果更大。

有誰知道一種方法來強制列以適應網格的寬度?

+0

的可能的複製[我如何與明星定義WPF網格列夾內容?] (http://stackoverflow.com/questions/25567474/how-do-i-get-wpf-grid-columns-defined-with-star-to-clip-content) – Starceaker 2016-02-15 07:41:04

回答

1

你確定要包裝文本?或者你的目標是文字修剪?我問,因爲當我鍵入kaxaml下面的XAML,中間列中的文本是完全包裹:

<Page 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> 
    <Grid> 
    <StackPanel> 
    <ListBox ScrollViewer.HorizontalScrollBarVisibility="Disabled" Width="350"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
     <Grid> 
      <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="2*"/> 
      <ColumnDefinition Width="*" /> 
      </Grid.ColumnDefinitions> 
      <TextBlock Margin="4" Grid.Column="0" TextWrapping="Wrap" 
        Text="Binding A" MinWidth="100"/> 
      <TextBlock Margin="4" Grid.Column="1" TextWrapping="Wrap" 
        Text=" Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco" MinWidth="100"/> 
      <TextBlock Margin="4" Grid.Column="2" TextWrapping="Wrap" 
        Text="Binding C" MinWidth="100"/> 
     </Grid> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
    <TextBlock Text="" /> 
    <TextBlock Text=""/> 
    <TextBlock Text=""/> 
    </ListBox> 
    </StackPanel> 
    </Grid> 
</Page> 

如果要修剪的文本,在需要的地方剛剛成立TextWrapping="NoWrap"和的TextTrimming到TextTrimming="CharacterEllipsis"

有可能是還你沒有提供的所有數據,重現您所描述的問題...

+0

謝謝,但這符合三個三要求:它正確包裝並且列擴展以減小網格的寬度;但列寬是隨真實數據而變化的 - 你們之間的對比很好,因爲你對每一行都使用相同的數據。 我無法做的事情是獲取要包裝的文本,列以適應列表框的寬度和列寬度爲每行保持一致。 – amaca 2009-11-30 11:09:47

+0

你可以添加一張圖片顯示你正在嘗試做什麼?我仍然無法得到它.. – Anvaka 2009-11-30 19:52:09