我做了一些谷歌搜索,发现了几个参考文献,它们与下面的例子做了类似的事情。当我尝试这个时,第一列是初始对齐的。 如果没有HorizontalContentAlignment的setter,则在调整列的大小时,文本会保持不变,而不是跟踪列的右边缘。添加setter会使TextBlock在调整大小时居中,但不会拉伸以适应列。我更改了第一列的背景颜色,以突出显示正在发生的事情。我正在使用VS 2008和3.5 SP1版本的框架。
<Window.Resources>
<XmlDataProvider x:Key="CharacterData">
<x:XData>
<Data xmlns="">
<Character First="Bart" Last="Simpson" />
<Character First="Homer" Last="Simpson" />
<Character First="Lisa" Last="Simpson" />
<Character First="Maggie" Last="Simpson" />
<Character First="Marge" Last="Simpson" />
</Data>
</x:XData>
</XmlDataProvider>
</Window.Resources>
<ListView ItemsSource="{Binding Source={StaticResource CharacterData},
XPath=Data/Character}" >
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn Width="100" Header="First Name" >
<GridViewColumn.CellTemplate >
<DataTemplate>
<TextBlock Width="98" Margin="-6,0" TextAlignment="Right" Text="{Binding XPath=@First}" Background="Aqua" HorizontalAlignment="Stretch" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="100" Header="Last Name">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Width="100" Margin="-6,0" TextAlignment="Left" Text="{Binding XPath=@Last}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
更新:从TextBox中删除width参数可以使ItemContainerStyle中定义的拉伸正常工作。
<DataTemplate>
<TextBlock Margin="-6,0" TextAlignment="Right" Text="{Binding XPath=@First}" Background="Aqua" />
</DataTemplate>
答案 0 :(得分:1)
您需要将HorizontalContentAlignment="Stretch"
放到列表视图中。
更新:我的意思是列表视图本身,而不是容器样式:
<ListView ItemsSource="{Binding Source={StaticResource CharacterData}, XPath=Data/Character}" HorizontalContentAlignment="Stretch">
Update2 :我刚刚注意到您已经设置了Width
个文本块 - 这就是为什么它们没有拉伸。如果您想要最小宽度
Width
并将其替换为MinWidth