Pergunta

Existe um mecanismo equivalente ao ItemsControl.ItemTemplate que funciona com um Grid? Eu tenho uma coleção de itens e eu gostaria de apresentá-los como linhas em um Grid para que eu possa atribuir Grid.Column aos elementos individuais dentro do modelo (ao contrário de linhas em um controle de lista). Isso é possível no WPF usando controles padrão?

Foi útil?

Solução

Ok, usar um ItemsControl com o Grid.IsSharedSizeScope="true" propriedade anexada aplicada. Em seguida, para o seu seu ItemTemplate, você usa um <Grid> apenas como faria normalmente, exceto agora, quando você adicionar ColumnDefinitions você definir o atributo SharedSizeGroup para um nome que é único para cada coluna. Assim, por exemplo:

<ItemsControl Grid.IsSharedSizeScope="true">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition SharedSizeGroup="MyFirstColumn" />
                    <ColumnDefinition SharedSizeGroup="MySecondColumn" />
                </Grid.ColumnDefinitions>
                <TextBlock Grid.Column="0" Text="{Binding MyFirstProperty}"/ >
                <TextBlock Grid.Column="1" Text="{Binding MySecondProperty}"/ >
            </Grid>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

Para saber mais sobre IsSharedSizeScope e SharedSizeGroup, cheque esta seção do SDK . Deve-se notar que RowDefinitions também têm um SharedSizeGroup de modo que você poderia fazer layouts horizontais também.

Outras dicas

Talvez eu não entendi o seu problema, mas não é exatamente o que um GridView faz?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top