none
ListView não alinha coluna RRS feed

  • Pergunta

  • Estou usando WPF e C# com a versão 4 do Framework .Net.

    Não estou conseguindo alinhar uma coluna do ListView à direita. Já tentei de tudo, inclusive Templates.

    Segue código WPF:

    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="auto"/>
            </Grid.RowDefinitions>
            <ListView ItemsSource="{Binding}" x:Name="listViewFiles">
                <ListView.View>
                    <GridView AllowsColumnReorder="True">
                        <GridViewColumn DisplayMemberBinding="{Binding Path=Code}"
                                        Header="Código"
                                        Width="auto" />
                        <GridViewColumn DisplayMemberBinding="{Binding Path=Title}"
                                        Header="Título"
                                        Width="auto" />
                        <GridViewColumn DisplayMemberBinding="{Binding Path=Description}"
                                        Header="Descrição"        
                                        Width="auto" />
                        <!-- Coluna de data/hora formatada -->
                        <GridViewColumn DisplayMemberBinding="{Binding Path=LastRevision, StringFormat='dd/MM/yyyy-HH:mm:ss'}" 
                                        Header="Última revisão"                                    
                                        Width="auto" />
                        <GridViewColumn Header="Tamanho" Width="Auto">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Size, StringFormat='n2'}" HorizontalAlignment="Right" Block.TextAlignment="Right" />
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView>
                </ListView.View>
            </ListView>
        </Grid>
    </Window>
    
    


     

     


    Vladimir
    terça-feira, 31 de janeiro de 2012 12:03

Respostas

  • Valeu. Na verdade, resolve parte do problema uma vez que eu preciso mudar para DataGrid e não mais ListView.

    Por outro lado, encontrei uma solução para parte do problema que é definir a propriedade "width" do TextBlock e remover da definição da GridViewColumn.

    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="auto"/>
            </Grid.RowDefinitions>
            <ListView ItemsSource="{Binding}" x:Name="listViewFiles" HorizontalAlignment="Right">
                <ListView.View>
                    <GridView AllowsColumnReorder="True">
                        <GridViewColumn DisplayMemberBinding="{Binding Path=Code}"
                                        Header="Código"
                                        Width="auto" />
                        <GridViewColumn DisplayMemberBinding="{Binding Path=Title}"
                                        Header="Título"
                                        Width="auto" />
                        <GridViewColumn DisplayMemberBinding="{Binding Path=Description}"
                                        Header="Descrição"        
                                        Width="auto" />
                        <!-- Coluna de data/hora formatada -->
                        <GridViewColumn DisplayMemberBinding="{Binding Path=LastRevision, StringFormat='dd/MM/yyyy-HH:mm:ss'}" 
                                        Header="Última revisão"                                    
                                        Width="auto" />
                        <GridViewColumn Header="Tamanho">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Size, StringFormat='n2'}" HorizontalAlignment="Right" Block.TextAlignment="Right" Width="120" />
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView>
                </ListView.View>
            </ListView>
        </Grid>
    </Window>
    
    Sinto que terei vários problemas com XAML... 

     


    Vladimir
    • Marcado como Resposta Vlad Rech terça-feira, 31 de janeiro de 2012 15:21
    terça-feira, 31 de janeiro de 2012 15:21

Todas as Respostas

  • Finalmente alguém no Fórum WPF (:

    Segue a solução do seu problema

    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="auto"/>
            </Grid.RowDefinitions>
            <ListView ItemsSource="{Binding}" x:Name="listViewFiles" HorizontalAlignment="Right">
                <ListView.View>
                    <GridView AllowsColumnReorder="True">
                        <GridViewColumn DisplayMemberBinding="{Binding Path=Code}"
                                        Header="Código"
                                        Width="auto" />
                        <GridViewColumn DisplayMemberBinding="{Binding Path=Title}"
                                        Header="Título"
                                        Width="auto" />
                        <GridViewColumn DisplayMemberBinding="{Binding Path=Description}"
                                        Header="Descrição"        
                                        Width="auto" />
                        <!-- Coluna de data/hora formatada -->
                        <GridViewColumn DisplayMemberBinding="{Binding Path=LastRevision, StringFormat='dd/MM/yyyy-HH:mm:ss'}" 
                                        Header="Última revisão"                                    
                                        Width="auto" />
                        <GridViewColumn Header="Tamanho" Width="Auto">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Size, StringFormat='n2'}" HorizontalAlignment="Right" Block.TextAlignment="Right" />
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView>
                </ListView.View>
            </ListView>
        </Grid>
    </Window>
    

    Apenas utiliezei

    HorizontalAlignment="Right"
    



    Artigos e Dicas VB.NET, C#, SQL, Report viewer e WPF
    Siga @PauloHDSousa
    terça-feira, 31 de janeiro de 2012 12:42
  • Opa, valeu pela força, porém... eu quero alinhar só uma coluna, referente ao campo Size.

    O código que você passou, alinha o ListView inteiro...


    Vladimir
    terça-feira, 31 de janeiro de 2012 12:44
  • Continuemos, você quer que apenas a coluna TAMANHO fique no fim da janela ?

     


    Artigos e Dicas VB.NET, C#, SQL, Report viewer e WPF
    Siga @PauloHDSousa
    terça-feira, 31 de janeiro de 2012 12:54
  • Não. O que eu quero é que o conteúdo da coluna TAMANHO fique alinhado à direita mas, que esta fique junto com as demais.

    No Windows Forms isto era um tapa... (frustrado...)


    Vladimir
    terça-feira, 31 de janeiro de 2012 13:08
  • Valeu. Na verdade, resolve parte do problema uma vez que eu preciso mudar para DataGrid e não mais ListView.

    Por outro lado, encontrei uma solução para parte do problema que é definir a propriedade "width" do TextBlock e remover da definição da GridViewColumn.

    <Window x:Class="WpfApplication1.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow" Height="350" Width="525">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="auto"/>
            </Grid.RowDefinitions>
            <ListView ItemsSource="{Binding}" x:Name="listViewFiles" HorizontalAlignment="Right">
                <ListView.View>
                    <GridView AllowsColumnReorder="True">
                        <GridViewColumn DisplayMemberBinding="{Binding Path=Code}"
                                        Header="Código"
                                        Width="auto" />
                        <GridViewColumn DisplayMemberBinding="{Binding Path=Title}"
                                        Header="Título"
                                        Width="auto" />
                        <GridViewColumn DisplayMemberBinding="{Binding Path=Description}"
                                        Header="Descrição"        
                                        Width="auto" />
                        <!-- Coluna de data/hora formatada -->
                        <GridViewColumn DisplayMemberBinding="{Binding Path=LastRevision, StringFormat='dd/MM/yyyy-HH:mm:ss'}" 
                                        Header="Última revisão"                                    
                                        Width="auto" />
                        <GridViewColumn Header="Tamanho">
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Size, StringFormat='n2'}" HorizontalAlignment="Right" Block.TextAlignment="Right" Width="120" />
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
                    </GridView>
                </ListView.View>
            </ListView>
        </Grid>
    </Window>
    
    Sinto que terei vários problemas com XAML... 

     


    Vladimir
    • Marcado como Resposta Vlad Rech terça-feira, 31 de janeiro de 2012 15:21
    terça-feira, 31 de janeiro de 2012 15:21
  • Obrigado pela dica.
    Vladimir
    terça-feira, 31 de janeiro de 2012 18:13