Question

Cette question est identique à celle de cet autre question sans réponse .

Lorsque Expander est développé, ListView extérieur s'agrandit pour laisser de la place pour le contenu des expandeurs, mais lorsque Expander est ensuite réduit, la vue ne force pas le ListView à redimensionner.

Code réduit, avec des notes après:

<!--<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>-->

J'ai ParameterGroupView dans un ItemsControl ou StackPanel car il existe en réalité de nombreuses entrées ParameterGroupView . L'échange sur un StackPanel ne modifie pas le comportement.

La suppression de Boarder n’affecte pas le comportement, mais cela permet d’afficher le comportement avec un seul ParameterGroupView .

Il peut y avoir plusieurs sections Expander dans ListView extérieur, et Expander peut contenir de nombreuses entités à l'intérieur de ListView .

ListView et Expander externes doivent remplacer un TreeView , qui était utilisé pour avoir une liste de nœuds réductibles, mais TreeView signifie que les éléments TextView ont été écrasés horizontalement, comme si vous supprimiez les attributs ether HorizontalContentAlignment = "Stretch" .

Donc, s’il existe un autre moyen d’envelopper tout cela, je serai également heureux.

Cela pose un problème car nos blocs TextView sont volumineux et que de nombreux Expander modules.

Modifier: TextView est utilisé car le code est lié aux données, et donc mis en place de manière dynamique. Donc, tout remplacement de ListView nécessiterait une forme de ItemsSource

Était-ce utile?

La solution

Nous avons trouvé la solution et cela détaille déjà où dans la question.

ItemControl accepte une ItemsSource et un redimensionnement automatique. Ainsi, le remplacement des deux ListView par ItemControl obtient la réduction imbriquée.

Mais il n'y a pas de défilement, enveloppez donc ItemControl extérieur avec un ScrollViewer , afin de reproduire l'effet complet souhaité.

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

Je testais avec des doubles expandeurs dans les sections Border et Double Border.

Autres conseils

La chose la plus évidente à faire ici est de placer les expandeurs dans un conteneur autre qu'une 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>

Le conteneur redimensionne parfaitement autour du contenu.

Si vous devez absolument l'avoir dans un ListView (ce qui est possible), je ne connais aucun moyen de le redimensionner facilement une fois développé (au-delà de la définition de tailles explicites de l'ensemble, ce qui est maladroit et complexe. pas utile). Si c'est le cas, il est possible que vous deviez utiliser une zone de liste contrôlable pour afficher tous les expandeurs ouverts ou afficher le contenu d'une manière différente (comme dans un popup, peut-être?) Si vous voulez pouvoir le voir. en un coup d'œil.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top