为listview列设置不同的对齐方式

时间:2012-07-09 14:54:11

标签: wpf listview

我无法使用左对齐或居中对齐的列绘制列表视图。我已经看过了我在这里或其他论坛上找到的一些解决方案,但它们似乎适用于all columns,或者我无法让它们正常工作。

到目前为止我得到的最好的是这段代码,但是所有内容都是左对齐的(我已经将右对齐来测试代码)。有人能告诉我哪里出错了吗?

<ListView Name="lsvQuestions" DockPanel.Dock="Bottom">                
     <ListView.View>
         <GridView>
             <GridViewColumn Width="450" Header="Question Text">
                 <GridViewColumn.CellTemplate>
                     <DataTemplate>
                         <TextBlock Text="{Binding QuestionText}" TextAlignment="Left"/>
                     </DataTemplate>
                 </GridViewColumn.CellTemplate>
                 </GridViewColumn>
                 <GridViewColumn Width="200" Header="Type">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding QuestionType}" TextAlignment="Right"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                 </GridViewColumn>
                 <GridViewColumn Width="100" Header="Page Number">
                     <GridViewColumn.CellTemplate>
                         <DataTemplate>
                             <TextBlock Text="{Binding QuestionPageNumber}" TextAlignment="Center"/>
                         </DataTemplate>
                     </GridViewColumn.CellTemplate>
                 </GridViewColumn>
                 <GridViewColumn Width="100" Header="Order">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding QuestionOrder}" TextAlignment="Center"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>               
    </ListView>

2 个答案:

答案 0 :(得分:45)

您的ListViewItem默认情况下不会展开内容,这就是为什么所有项目都显示在左侧。添加它,它将起作用:

<ListView.ItemContainerStyle>
    <Style TargetType="ListViewItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    </Style>
</ListView.ItemContainerStyle>

答案 1 :(得分:11)

虽然LPL的提示已经节省了数千个令人头疼的问题,但我会更进一步,将 Horizo​​ntalContentAlignment VerticalContentAlignment 定义为延伸为了在大多数使用的表驱动控件上定位预期的对齐行为:

  • ListView列标题和项目模板

  • DataGrid列标题和单元格模板。

    <Window x:Class="TaskManager.UI.Views.AcumuladosPorTarefaWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:v="clr-namespace:TaskManager.UI.Views"
    xmlns:catel="http://catel.codeplex.com"        
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    Title="AcumuladosPorTarefaWindow" Height="451.533" Width="323.305"
    >
    <Window.Resources>
    <Style TargetType="GridViewColumnHeader">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        <Setter Property="VerticalContentAlignment" Value="Stretch" />
    </Style>
    <Style TargetType="DataGridColumnHeader">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        <Setter Property="VerticalContentAlignment" Value="Stretch" />
    </Style>
    <Style TargetType="ListViewItem">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        <Setter Property="VerticalContentAlignment" Value="Stretch" />
    </Style>
    <Style TargetType="DataGridCell">
        <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        <Setter Property="VerticalContentAlignment" Value="Stretch" />
    </Style>
    </Window.Resources>
    <StackPanel Orientation="Vertical">
    
    <ListView ItemsSource="{Binding AcumuladosPorTarefa}" SelectedItem="{Binding LinhaSelecionada}">
        <ListView.View>
            <GridView>
                <GridViewColumn>
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding TarefaID}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                    <GridViewColumnHeader>
                        <TextBlock Text="ID" TextAlignment="Center" />
                    </GridViewColumnHeader>
                </GridViewColumn>
                <GridViewColumn>
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Tarefa.Nome}"/>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                    <TextBlock Text="Nome" TextAlignment="Left"/>
                </GridViewColumn>
                <GridViewColumn>
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding DuracaoInMS}" TextAlignment="Right" HorizontalAlignment="Stretch" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                    <GridViewColumnHeader Width="auto">
                        <TextBlock Text="Duração" TextAlignment="Right"/>
                    </GridViewColumnHeader>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>
    <DataGrid ItemsSource="{Binding AcumuladosPorTarefa}" AutoGenerateColumns="False" SelectedItem="{Binding LinhaSelecionada}" CanUserAddRows="False" HorizontalAlignment="Stretch">
        <DataGrid.Columns>
            <DataGridTemplateColumn Width="auto" MinWidth="20" CanUserSort="True" CanUserReorder="True" CanUserResize="True">
                <DataGridTemplateColumn.Header>
                    <TextBlock Text="ID" TextAlignment="Right" />
                </DataGridTemplateColumn.Header>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding TarefaID}" HorizontalAlignment="Stretch"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Width="auto" MinWidth="150" CanUserSort="True">
                <DataGridTemplateColumn.HeaderTemplate>
                    <DataTemplate>
                        <TextBlock Text="Nome" HorizontalAlignment="Left"/>
                    </DataTemplate>
                </DataGridTemplateColumn.HeaderTemplate>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Tarefa.Nome}"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="Duração" Width="auto" MinWidth="25" IsReadOnly="True">
                <DataGridTemplateColumn.HeaderTemplate>
                    <DataTemplate>
                        <TextBlock Text="Duração" TextAlignment="Right"/>
                    </DataTemplate>
                </DataGridTemplateColumn.HeaderTemplate>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding DuracaoInMS}" TextAlignment="Right" />
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
    </StackPanel>
    </Window>
    

Rembember:您可以随时define your default styles and other resources at application level,这样您就不必为每个视图定义它。

希望它能帮助像LPL这样的其他人提示帮助我。