7

この質問は、この他の未回答の質問と同じです。

エキスパンダーを展開すると、外側のListViewが拡大してエキスパンダーのコンテンツ用のスペースが作成されますが、エキスパンダーを折りたたむと、ビューによってListViewのサイズが強制的に変更されることはありません。

削減されたコード、後に注記があります:

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

実際には多くのParameterGroupViewエントリがあるため ItemsControlまたはStackPanelParameterGroupViewがあります。StackPanelに交換しても、動作は変わりません。

ボーダーを削除しても動作には影響しませんが、ボーダーを削除すると、単一のParameterGroupViewのみで動作を表示するのに役立ちます。

外側のListViewには多くのExpanderセクションがあり、内側のListView内にはExpanderが多くのエンティティを持つことができます。

外側のListViewExpanderは、折りたたみ可能なノードのリストを作成するために使用されていたTreeViewを置き換えるものですが、 TreeViewの内部グリッドの使用は、エーテルのHorizo​​ntalContentAlignment = "を削除した場合と同じように、TextViewアイテムが水平方向に押しつぶされたことを意味します。ストレッチ」属性。

ですから、これをすべてまとめる/配線する別の方法があれば、私も幸せになります。

TextViewブロックが大きく、 Expanderが多数あるため、これは問題です。

編集:コードはデータにバインドされているため、 TextViewが使用され、動的にまとめられます。したがって、ListViewを置き換えるには、何らかの形式のItemsSourceが必要になります。

4

2 に答える 2

4

解決策を見つけました、そしてそれはすでに質問のどこにあるかを詳述します。

ItemControlはItemsSourceを受け入れ、自動サイズ変更します。したがって、2つのListViewItemControlに置き換えると、ネストされた折りたたみが発生します。

ただし、スクロールはありません。そのため、外側のItemControlScrollViewerでラップすると、完全に望ましい効果が再現されます。

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

BorderセクションとdoubleBorderセクションでダブルエキスパンダーを使用してテストしていました。

于 2009-11-30T20:01:50.930 に答える
2

ここで行う最も明白なことは、エキスパンダーをリストビュー以外のコンテナーに配置することです。

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

コンテナはコンテンツの周りでうまくサイズ変更されます。

どうしてもListViewに含める必要がある場合(これは可能です)、ListViewを大きくした後、簡単にサイズを変更する方法がわかりません(全体の明示的なサイズを設定する以外に、不器用で役に立たない)。 。その場合は、制御可能なリストボックスを使用して、開いているすべてのエキスパンダーを表示するか、コンテンツを表示したい場合は別の方法(ポップアップなど)で表示する必要があります。一目ですべて。

于 2009-11-30T16:23:36.767 に答える