Pergunta

Esta questão é o mesmo que este outro sem resposta pergunta .

Quando o Expander é expandido o exterior ListView cresce para dar espaço para o conteúdo expansores, mas quando o Expander é então desabou a visão não força o ListView para redimensionar.

código reduzida, com notas depois:

<!--<StackPanel>-->
<ItemsControl>

  <!-- ParameterGroupView -->
  <Border BorderBrush="Brown" BorderThickness="1" CornerRadius="4" Padding="4">
    <ListView HorizontalContentAlignment="Stretch">
      <Expander Header="Expander A" IsExpanded="False">
        <ListView HorizontalContentAlignment="Stretch">

          <!-- TextView -->
          <TextBlock >Content A</TextBlock>
          <TextBlock >Content B</TextBlock>

        </ListView>
      </Expander>

    </ListView>
  </Border>

</ItemsControl>
<!--</StackPanel>-->

Eu tenho o ParameterGroupView em ItemsControl ou StackPanel , porque há realmente muitos ParameterGroupView entradas. Trocando a um StackPanel não muda o comportamento.

A remoção do Boarder não afeta o comportamento, mas tê-lo ajuda a mostrar o comportamento com apenas um único ParameterGroupView .

Pode haver muitos Expander seções no exterior ListView e Expander pode ter muitas entidades dentro do interior ListView .

O exterior ListView e Expander é substituir um TreeView , que foi usado para ter uma lista de nós dobráveis, mas o TreeView 's uso interno das redes, os itens TextView foram esmagadas horizonatlly, o mesmo que se você remover éter HorizontalContentAlignment = "Stretch" atributos.

Portanto, se há uma outra maneira de embrulhar / fio de tudo isso, eu vou ser feliz também.

Este é um problema porque a nossa TextView blocos são grandes e há muitos Expander s.

Editar: TextView é usado como o código é vinculado dados e, assim, colocar dinamicamente juntos. Assim, qualquer substituto para ListView seria necessário algum tipo de ItemsSource

Foi útil?

Solução

encontrou a solução, e detalha onde na questão já.

ItemControl aceita um ItemsSource e auto redimensiona. Então, substituindo os dois ListView s com ItemControl S recebe o aninhados em colapso.

Mas não há nenhuma rolagem, então envolver o exterior ItemControl com ScrollViewer , reproduz o efeito desejado completa.

<ScrollViewer
    VerticalScrollBarVisibility="Auto">
    <ItemsControl>
        <!-- ParameterGroupView -->
        <Border
            BorderBrush="Brown"
            BorderThickness="1"
            CornerRadius="4"
            Padding="4"
            Height="Auto">
            <ItemsControl
                HorizontalContentAlignment="Stretch">
                <Expander
                    Header="Expander A"
                    IsExpanded="False">
                    <ItemsControl
                        HorizontalContentAlignment="Stretch">
                        <!-- TextView -->
                        <TextBlock>Content A</TextBlock>
                        <TextBlock>Content B</TextBlock>
                    </ItemsControl>
                </Expander>
            </ItemsControl>
        </Border>
    </ItemsControl>
</ScrollViewer>

Eu estava testando com expansores duplos na Fronteira e seções borda dupla.

Outras dicas

A coisa mais óbvia a fazer aqui é colocar os expansores em um recipiente que não seja um listview:

<Border BorderBrush="Brown" BorderThickness="1" CornerRadius="4" Padding="4">
    <StackPanel>

        <Expander Header="Expander A" IsExpanded="False">
            <ListView HorizontalContentAlignment="Stretch" MinWidth="100">
                <ListBox Name="listb"></ListBox>

                <!-- TextView -->
                <TextBlock >Content A</TextBlock>
                <TextBlock>Content B</TextBlock>

            </ListView>
        </Expander>
    </StackPanel>
</Border>

O recipiente redimensiona apenas multa em torno do conteúdo.

Se você absolutamente deve tê-lo em um ListView (o que é possível), então eu não sei de uma maneira de obter um ListView para redimensionar facilmente uma vez que ele é cultivado (além de definir tamanhos explícitas da coisa toda, que é desajeitado e nao é útil). Se isso é o caso, então é possível que você terá que usar uma caixa de listagem controlável para exibir todos os expansores abertas, ou exibir o conteúdo de uma forma diferente (como em um pop-up, talvez?), Se você quiser ser capaz de vê-lo tudo num ápice.

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