で仮想化を失い、私はXAMLで、次のツリービューを持っているとき(のItemsSourceはリストのリストの長いリストにコードビハインドを経由して設定されている):ツリービューは、オーバーライドされたコントロールテンプレート
<TreeView x:Name="Tree"
VirtualizingPanel.IsVirtualizing="True"
ScrollViewer.CanContentScroll="True">
<!-- ItemTemplate and ItemContainerStyle ommitted for brevity -->
</TreeView>
仮想化だけで正常に動作します。しかし、内部のScrollViewerのテンプレートと共にTreeViewのテンプレートを上書きしようとすると、仮想化が消えてしまいました。私のテンプレートはデフォルトと同じように見えますが、私が取り出した色付きの矩形はテンプレートを再定義する動機です。
<TreeView.Template>
<ControlTemplate TargetType="{x:Type TreeView}">
<ScrollViewer Focusable="False"
CanContentScroll="True">
<ScrollViewer.Template>
<ControlTemplate TargetType="{x:Type ScrollViewer}">
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
<ScrollContentPresenter Grid.Column="0" Grid.Row="0" />
<ScrollBar x:Name="PART_VerticalScrollBar"
Orientation="Vertical"
Grid.Row="0" Grid.Column="1"
Value="{TemplateBinding VerticalOffset}"
Maximum="{TemplateBinding ScrollableHeight}"
ViewportSize="{TemplateBinding ViewportHeight}"
Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" />
<ScrollBar x:Name="PART_HorizontalScrollBar"
Orientation="Horizontal"
Grid.Row="1" Grid.Column="0"
Value="{TemplateBinding HorizontalOffset}"
Maximum="{TemplateBinding ScrollableWidth}"
ViewportSize="{TemplateBinding ViewportWidth}"
Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" />
</Grid>
</ControlTemplate>
</ScrollViewer.Template>
<ScrollViewer.Content>
<ItemsPresenter x:Name="ItemsPresenter" />
</ScrollViewer.Content>
</ScrollViewer>
</ControlTemplate>
私は一時的にちょうどツリービューのリソースで{x:Static SystemColors.ControlBrushKey}
という名前の透明SolidColorBrush
をすることによってこの問題を回避得ているが、私は間違って何をやったかを知ることを好むだろう。あなたはそれを期待していないとき
#1は関連性があるようですが、どのように解決できるかわかりません。 ScrollViewerの高さを{{TemplateBinding Height}}に設定しようとしましたが(ScrollViewer内のグリッドでも同じですが)、運がありません。 #2についてはItemsPresenterを使用していますが、ItemsPanelTemplateを@ d.moncadaとして明示的に設定しようとしましたが、まだ運がありません。私は#3に同意しなければならない。 ItemsSourceがプログラムによって生成された場合でも、仮想化の有無にかかわらず、その違いを明確に見ることができます。仮想化がオフの場合でも、ウィンドウはロードされません。 –