我正在构建一个需要有五列的ListView - 第一个需要包含任意长度的文本,并且需要在窗口大小更改时进行换行(除了更改行高以使包装文本可见)和其他四列的静态宽度为45.我一直在搜索这个问题,我遇到的每个解决方案都要求静态宽度或不起作用。
尝试解决方案:
自动列宽,1 *,2 *等(忽略设置) DockPanel(忽略设置) WrapPanel(忽略) 将“宽度”设置为“实际宽度(忽略)”的父级的RelativeSource
有什么想法吗?似乎很多人都遇到过同样的问题,但我更倾向于不必为此专栏选择静态宽度路径。特别是因为当我这样做时内容刚刚被切断(即使行的高度=“自动”)。整个窗口的宽度可以小到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>
答案 0 :(得分:1)
不是那么容易......但可以做到。
我为你写了一个解决方案。简而言之,使用Expression Blend创建ListView模板的副本并删除ItemPresenter周围的ScrollViewer。
这是一个更深入的解释:
答案 1 :(得分:0)
<ListView HorizontalContentAlignment="Stretch" ScrollViewer.HorizontalScrollBarVisibility="Disabled">
<ListView.ItemTemplate>
...
</ListView.ItemTemplate>
</ListView>
答案 2 :(得分:-1)
我将TextWrapping =“Wrap”添加到第一个TextBlock元素。