gpt4 book ai didi

wpf - TreeView 因覆盖控件模板而失去虚拟化

转载 作者:行者123 更新时间:2023-12-02 03:33:35 26 4
gpt4 key购买 nike

当我在 XAML 中有以下 TreeView 时(ItemsSource 通过代码隐藏设置为一长串列表):

<TreeView x:Name="Tree"
VirtualizingPanel.IsVirtualizing="True"
ScrollViewer.CanContentScroll="True">
<!-- ItemTemplate and ItemContainerStyle ommitted for brevity -->
</TreeView>

虚拟化效果很好。然而,当我尝试覆盖 TreeView 的模板以及内部 ScrollViewer 的模板时,虚拟化消失了。我的模板看起来与默认模板相同,除了我取出的彩色矩形,这是重新定义模板的全部动机。

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

我通过在 TreeView 的资源中创建一个名为 {x:Static SystemColors.ControlBrushKey} 的透明 SolidColorBrush 暂时解决了这个问题,但我更愿意知道我做错了什么。

最佳答案

我发现了问题。在 ScrollViewer 模板中,ScrollContentPresenter 需要将 CanContentScroll 设置为其模板化父项的值。

<ScrollContentPresenter Grid.Column="0" Grid.Row="0"
CanContentScroll="{TemplateBinding CanContentScroll}" />

关于wpf - TreeView 因覆盖控件模板而失去虚拟化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41465617/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com