2011-07-26 75 views
1

我正在构建一个ListView,需要有五列 - 第一个需要具有可以是任何长度的文本,并且需要在窗口大小发生变化时进行换行(除了更改行高以便包裹的文本是可见的),另外四列是45的静态宽度。我一直在寻找这个小时,我遇到的每个解决方案要么需要静态宽度要么不工作。WPF ListView TextBlock TextWrapping

解决方案的尝试:

汽车的列宽,1 *,2 *,等。(设置忽略) DockPanel中(设置忽略) WrapPanel(忽略) 设置宽于母公司的RelativeSource为ActualWidth的(忽略)

任何想法?似乎有相当多的人有这个相同的问题,但我非常喜欢不必为此列使用静态宽度路由。特别是因为当我这样做时,内容会被切断(即使对于该行,高度=“自动”)。整个窗口的宽度可以小到1024,但也可以是1600+,这就是为什么我需要动态调整大小的原因。这样一来,较小的屏幕就可以进行内容包装,而较大的屏幕将显示内容适合的一行。

这里是XAML:

<ListView.ItemTemplate> 
    <DataTemplate> 
     <Grid> 
      <Grid.ColumnDefinitions> 
       <ColumnDefinition /> 
       <ColumnDefinition Width="45" /> 
       <ColumnDefinition Width="45" /> 
       <ColumnDefinition Width="45" /> 
       <ColumnDefinition Width="45" /> 
      </Grid.ColumnDefinitions> 

      <!-- This is the TextBlock that needs to wrap its content (and 
       change the height of the row (so the full content is still 
       visible) to whatever the available space is, but should not 
       make overall ListView wider than the parent's width. --> 
      <TextBlock Text="{Binding Content}" Padding="20,6,6,6" />        

      <!-- These four blocks will have other content eventually, but only need 
       to be 45 wide --> 
      <TextBlock Text="X" Grid.Column="1" HorizontalAlignment="Center" /> 
      <TextBlock Text="X" Grid.Column="2" HorizontalAlignment="Center" /> 
      <TextBlock Text="X" Grid.Column="3" HorizontalAlignment="Center" /> 
      <TextBlock Text="X" Grid.Column="4" HorizontalAlignment="Center" /> 
     </Grid> 
    </DataTemplate> 
</ListView.ItemTemplate> 

回答

1

不是那么容易...但它可以做到。

我为你写了一个解决方案。简而言之,使用Expression Blend创建ListView模板的副本并删除围绕ItemPresenter的ScrollViewer。

这里有一个更深入的解释:

How to have the TextBlock in a left column of a Grid in a ListView Template expand or shrink with text wrapping?

+0

这正是我所期待的!我遇到的唯一问题是希望很容易解决,即文本包装内容所在行的大小不会更改,因此包装的内容会消失。我可以看到大多数角色的顶部,但不足以阅读它们。感谢您让我99%,但! – RubyHaus

+0

在我的盒子里,我没有看到与我的测试应用程序。您必须在应用中明确设置高度或将VerticalAlignment设置为拉伸之外的其他值。在评论中发布您的新XAML。 – Rhyous

+0

啊 - 就是这样。有一个高度值为30的ListView.ItemContainerStyle。我把它取下来,这件事情的作品正是我想要的。如果有一种方法可以给你多个upvote,我会。 – RubyHaus

-1

我想补充TextWrapping = “包装” 到第一TextBlock元素。

+0

它已添加,但在我的乱投医我必须尝试意外删除它。但该设置被忽略。 – RubyHaus