2009-11-29 18 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