【发布时间】:2016-07-22 08:58:58
【问题描述】:
我在显示带有 DataGrids 的 ListView(作为项目模板)时遇到了一些问题。问题是 DataGrid 中的列宽大小不正确,并且没有拉伸以填充整个控件宽度。
代码:
<Window x:Class="WpfTest1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfTest1"
xmlns:system="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<x:Array x:Key="ListViewItems"
Type="{x:Type system:String}">
<system:String>1</system:String>
<system:String>2</system:String>
</x:Array>
<x:Array x:Key="DataGridItems"
Type="{x:Type system:String}">
<system:String>1</system:String>
<system:String>2</system:String>
<system:String>3</system:String>
</x:Array>
<DataTemplate x:Key="TemplateWidthDataGrid">
<DataGrid ItemsSource="{StaticResource DataGridItems}">
<DataGrid.Columns>
<DataGridTextColumn Header="Column1"
Width="*" />
<DataGridTextColumn Header="Column2"
Width="*" />
</DataGrid.Columns>
</DataGrid>
</DataTemplate>
</Window.Resources>
<Grid>
<ListView ItemTemplate="{StaticResource TemplateWidthDataGrid}"
ItemsSource="{StaticResource ListViewItems}" />
</Grid>
</Window>
在这种情况下如何让列填充控件宽度?
更新
按照 Ciccio 的回答,我在 ListViewItem 设置了 HorizontalContentAlignment 属性。
<ListView ItemTemplate="{StaticResource TemplateWithDataGrid}"
ItemsSource="{StaticResource ListViewItems}">
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment"
Value="Stretch" />
</Style>
</ListView.ItemContainerStyle>
</ListView>
(我还必须将AutoGenerateColumns="False" 设置为DataGrid。)
将此与放在ListView 之外的相同DataGrid 进行比较,如下所示:
<Grid>
<DataGrid ItemsSource="{StaticResource DataGridItems}"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="Column1"
Width="*" />
<DataGridTextColumn Header="Column2"
Width="*" />
</DataGrid.Columns>
</DataGrid>
</Grid>
【问题讨论】: