ListView com nested Expander não em colapso
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
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.