0

ScrollViewer にラップされた 4 行 1 列の Grid があります。行は、オブジェクトの階層 (ネストされたリスト) にバインドされたツリービューです。私は HierarchicalDataTemplate を使用して、TreeViewItem ノードとその子/ItemTemplates をレイアウトしています。

私の問題は、TreeViewItems を展開するたびに、垂直スクロールバーが表示されないことです。奇妙なことに、子ノードの一部である AccordionItem を展開すると、水平スクロール バーが表示されます。

TreeViewItem が展開されるたびに UpdateLayout() を呼び出すイベント ハンドラーを作成しようとしましたが、スクロールバーが表示されません。TreeView、Grid、および ScrollViewer に対しても UpdateLayout() を呼び出してみました。

4

2 に答える 2

0

これに対する答えは、いくつかの実験の後、痛々しいほど明白になりました。

ScrollViewer のHeightプロパティを指定することは、すべてが期待どおりに機能するために欠けていた部分でした。

<ScrollViewer HorizontalScrollBarVisibility="Auto" 
              VerticalScrollBarVisibility="Auto" 
              Height="350">  <!-- THIS was the missing piece!! -->
  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="Auto"/>
      <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <Controls:TreeView Grid.Row="0" ItemsSource="{Binding ListOne}" 
       ItemTemplate="{StaticResource ListOneTemplate}" >
    </Controls:TreeView>

    <Controls:TreeView Grid.Row="1" ItemsSource="{Binding ListTwo}" 
       ItemTemplate="{StaticResource ListTwoTemplate}" >
    </Controls:TreeView>

  </Grid>
</ScrollViewer>

FWIW、Grid、GridRows、およびTreeViewの高さと最大高さの設定など、他の多くのソリューションを試しました。また、グリッドの高さが変更されるたびにスクロールビューアーの高さを設定するイベントと、ツリー ビュー アイテムが変更されるたびにカスケード UpdateLayouts() を開始するイベントを作成しようとしました。

ScrollViewer の高さを設定することが、すべてが期待どおりに機能する唯一の方法でした。

于 2012-07-31T15:34:07.410 に答える