WPF ListView - 如何通过可调整大小的列使列对齐正常工作?

时间:2011-04-09 03:17:10

标签: wpf

我做了一些谷歌搜索,发现了几个参考文献,它们与下面的例子做了类似的事情。当我尝试这个时,第一列是初始对齐的。 如果没有Horizo​​ntalContentAlignment的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>

1 个答案:

答案 0 :(得分:1)

您需要将HorizontalContentAlignment="Stretch"放到列表视图中。

更新:我的意思是列表视图本身,而不是容器样式:

<ListView ItemsSource="{Binding Source={StaticResource CharacterData}, XPath=Data/Character}" HorizontalContentAlignment="Stretch">

Update2 :我刚刚注意到您已经设置了Width个文本块 - 这就是为什么它们没有拉伸。如果您想要最小宽度

,请移除Width并将其替换为MinWidth