Подтвердить что ты не робот

Настройка различных выравниваний для столбцов списка

У меня возникли проблемы с составлением списка с столбцами, расположенными слева или по центру. Я рассмотрел несколько решений, которые я нашел здесь или на других форумах, но они либо работают для всех столбцов, либо я не могу заставить их работать,

Самое лучшее, что я получил до сих пор, это этот код, но все выровнено влево (я поставил выравнивание по правому краю, чтобы проверить код). Может кто-нибудь сказать мне, где я пойду неправильно?

<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>
4b9b3361

Ответ 1

Ваш ListViewItem не растягивает контент по умолчанию и поэтому все элементы отображаются слева. Добавьте это, и он будет работать:

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

Ответ 2

Хотя LPL подсказка уже спасла тысячи головных болей, я бы пошел еще дальше и определил HorizontalContentAlignment и VerticalContentAlignment до растянуть, чтобы настроить ожидаемое поведение выравнивания для большинства используемых элементов управления, управляемых таблицей:

  • Элементы заголовков столбцов и элементов списка List

  • Заголовки столбцов 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: вы всегда можете определить свои стили по умолчанию и другие ресурсы на уровне приложений, поэтому вам не нужно определять его для каждого вида.

Надеюсь, что это поможет кому-то еще, как подсказка LPL, помогла мне.