2009-11-30 10 views
7

この質問は他のunanswered questionと同じです。 エキスパンダーが展開されている場合ネストされたエキスパンダーの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での挙動を示すことができます持ちます。

は、外側リストビューに多くのパンダセクションが存在することができ、かつパンダは、内側リストビュー内の多くの企業を持つことができます。

外側リストビューパンダツリービューを交換することであり、それは、折りたたみ可能なノードのリストを持って使用されたが、グリッドのツリービューの内部使用は、TextViewのアイテムが押しつぶされた手段horizo​​natlly、エーテルを削除した場合と同じHorizo​​ntalContentAlignment = "Stretch"属性。

このようにすべてをまとめて配線する別の方法がある場合は、私も満足しています。

TextViewブロックが大きく、エキスパンダーが多数あるため、これは問題です。

編集:TextViewは、コードがデータバインドされているため、動的に組み合わされるため、使用されます。だから、ListViewコントロールのための任意の交換がのItemsSourceのいくつかのフォームを必要とする

+0

また、コンテンツアイテムとのListViewスタイルのやりとりも欲しかったです。私は本当に束縛されるダイナミックなサイズ変更コントロールがほしいと思っていました。 –

答えて

4

解決策が見つかりました。どこに問題があるかを詳しく説明しています。

ItemControl ItemsSourceを受け入れ、自動サイズ変更を受け入れます。したがって、2つを置換すると、ListViewとなり、ItemControlが入れ子になります。

しかし、これScrollViewerのと外側ItemControlラッピングないスクロールは、存在しないが、完全な所望の効果を再現します。

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

私は、国境で​​のダブルパンダと二重枠部分でテストしていました。

+0

実際のアプリケーションでこれをテストしただけで、そこでも問題が解決されます。 –

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をサイズ変更した後に簡単にサイズを変更する方法はわかりません(全体的に明白なサイズ有用ではない)。その場合、コントロール可能なリストボックスを使用して開いているすべてのエクスパンダを表示したり、別の方法でコンテンツを表示したりする必要があるかもしれません(ポップアップなどのように)一目瞭然。

+0

はい、私はListBoxが間違っていることに同意しますが、StackPanelがそうでないようなItemsSourceをサポートするので、ListBoxが必要です。私の実際のシステムは完全なデータであり、静的ではありません。 –

関連する問題