Wpf 样式树视图,但保持虚拟化

Wpf 样式树视图,但保持虚拟化,wpf,treeview,styles,virtualization,Wpf,Treeview,Styles,Virtualization,我的树视图上的虚拟化在我仅在样式中使用以下xaml设置了树视图项目的样式时起作用: <Style.Triggers> <Trigger Property="VirtualizingStackPanel.IsVirtualizing" Value="true"> <Setter Property="ItemsPanel"> <Setter.Value> <Items

我的树视图上的虚拟化在我仅在样式中使用以下xaml设置了树视图项目的样式时起作用:

<Style.Triggers>
    <Trigger Property="VirtualizingStackPanel.IsVirtualizing" Value="true">
        <Setter Property="ItemsPanel">
            <Setter.Value>
                <ItemsPanelTemplate>
                    <VirtualizingStackPanel/>
                </ItemsPanelTemplate>
            </Setter.Value>
        </Setter>
    </Trigger>
</Style.Triggers>

但是如果我尝试给TreeView本身一个style={Resource}的样式,虚拟化就会中断,即:

<Style x:Key="FontTreeViewStyle" TargetType="{x:Type TreeView}">
    <Setter Property="OverridesDefaultStyle" Value="True" />
    <Setter Property="SnapsToDevicePixels" Value="True" />
    <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto" />
    <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto" />

    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="TreeView">
                <Border Name="Border" CornerRadius="1" BorderThickness="1" BorderBrush="{DynamicResource BorderMediumColor}" Background="{DynamicResource ControlLightColor}">
                    <ScrollViewer Focusable="False"  CanContentScroll="False" Padding="4"><!-- Style="{StaticResource MyScrollViewer}"-->
                        <ItemsPresenter />
                    </ScrollViewer>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>


提前谢谢

通过在ScrollViewer上指定CanContentScroll=“False”,您将始终停止它的虚拟化

看看

如果仍然存在问题,请仔细检查在Snoop或WPF Inspector中创建的可视化树。要使虚拟化工作,IScrollInfo对象(即面板)必须是ScrollViewer的直接子对象

希望有帮助,
通过在ScrollViewer上指定CanContentScroll=“False”进行标记,您将始终停止虚拟化

看看

如果仍然存在问题,请仔细检查在Snoop或WPF Inspector中创建的可视化树。要使虚拟化工作,IScrollInfo对象(即面板)必须是ScrollViewer的直接子对象

希望有帮助,
Mark

Mark Daniel alredy回答(谢谢!)但这里有一个完整的示例样式:

<Style x:Key="ScrollViewerStyle" TargetType="{x:Type ScrollViewer}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ScrollViewer}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition/>
                            <ColumnDefinition Width="Auto"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition/>
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>

                        <ScrollContentPresenter CanContentScroll="True" VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.IsContainerVirtualizable="True" VirtualizingPanel.VirtualizationMode="Recycling"/>

                        <ScrollBar Name="PART_VerticalScrollBar"
                            Grid.Column="1"
                            Value="{TemplateBinding VerticalOffset}"
                            Maximum="{TemplateBinding ScrollableHeight}"
                            ViewportSize="{TemplateBinding ViewportHeight}"
                            Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
                            Style="{DynamicResource ScrollBarStyle}"/>
                        <ScrollBar Name="PART_HorizontalScrollBar"
                            Orientation="Horizontal"
                            Grid.Row="1"
                            Value="{TemplateBinding HorizontalOffset}"
                            Maximum="{TemplateBinding ScrollableWidth}"
                            ViewportSize="{TemplateBinding ViewportWidth}"
                            Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
                            Style="{DynamicResource ScrollBarStyle}"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

MarkDaniel alredy回答(谢谢!)但这里有一个完整的示例样式:

<Style x:Key="ScrollViewerStyle" TargetType="{x:Type ScrollViewer}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type ScrollViewer}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition/>
                            <ColumnDefinition Width="Auto"/>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition/>
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>

                        <ScrollContentPresenter CanContentScroll="True" VirtualizingPanel.IsVirtualizing="True" VirtualizingPanel.IsContainerVirtualizable="True" VirtualizingPanel.VirtualizationMode="Recycling"/>

                        <ScrollBar Name="PART_VerticalScrollBar"
                            Grid.Column="1"
                            Value="{TemplateBinding VerticalOffset}"
                            Maximum="{TemplateBinding ScrollableHeight}"
                            ViewportSize="{TemplateBinding ViewportHeight}"
                            Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}"
                            Style="{DynamicResource ScrollBarStyle}"/>
                        <ScrollBar Name="PART_HorizontalScrollBar"
                            Orientation="Horizontal"
                            Grid.Row="1"
                            Value="{TemplateBinding HorizontalOffset}"
                            Maximum="{TemplateBinding ScrollableWidth}"
                            ViewportSize="{TemplateBinding ViewportWidth}"
                            Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}"
                            Style="{DynamicResource ScrollBarStyle}"/>
                    </Grid>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>


已修复。我复制了Expression Blend中生成的样式,并意识到我没有完全实现virtualzingstackpanel.isvirtualzingfixed。我复制了Expression Blend中生成的样式,并意识到我没有完全实现VirtualzingStackPanel.IsVirtualzingId它有帮助吗?我也有同样的问题:当我为我的树视图指定一个样式时,虚拟化中断了。对我来说很有效,谢谢!(CanContentScroll属性默认为false如果未设置,则必须将其设置为值/true)是否有帮助?我也有同样的问题:当我为我的树视图指定一个样式时,虚拟化中断了。对我来说很有效,谢谢!(CanContentScroll属性默认为false如果未设置,则必须将其设置为值/true)