0

默认情况下,有没有办法将从树视图派生的自定义控件的虚拟化设置为 true?例如,我有一个从 RadTreeView 派生的自定义控件:

public class MyTreeViewControl : RadTreeView
{
    static MyTreeViewControl()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(MyTreeViewControl), new FrameworkPropertyMetadata(typeof(MyTreeViewControl)));
    }
}

以及具有以下内容的 Generic.Xaml 文件:

<ResourceDictionary
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:userControls="clr-namespace:HDC.Solus.WPF.UserControls"
xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
xmlns:classes="clr-namespace:HDC.Solus.WPF.Classes">

<HierarchicalDataTemplate DataType="{x:Type classes:MyTreeViewItem}" ItemsSource="{Binding Children}">
    <StackPanel Orientation="Horizontal">
        <Image Height="16" Width="16" Source="{Binding IconUri}" />
        <TextBlock Text="{Binding Text}" />
    </StackPanel>
</HierarchicalDataTemplate>

<Style TargetType="{x:Type userControls:MyTreeViewControl}" BasedOn="{StaticResource {x:Type telerik:RadTreeView}}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type userControls:MyTreeViewControl}">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Setter Property="telerik:TreeViewPanel.IsVirtualizing" Value="True"/>
</Style>

但是,默认情况下不启用虚拟化,启用虚拟化的唯一方法是在创建时直接在控件上设置它,例如:

<userControls:MyTreeViewControl IsVirtualizing="True" />
4

1 回答 1

0

我没有太多地使用这个......但是用您选择的一个替换Treeviewpanel或一些模板不起作用吗?如果你不能在 xaml 中设置它。

如果要覆盖控件的默认元数据,可以在构造函数中执行类似的操作。不确定它是否会有所帮助

TreeView.ItemsPanelProperty.OverrideMetadata(typeof(MyTreeViewControl), new PropertyMetadata(myNewItemsPanel));

这就是您通常更改继承对象的依赖属性的方式。

您可能还想在自定义控件中创建一个“IsVirtualizing 依赖属性”,然后在“OnApplyTemplate”中将该属性绑定到 telerik:TreeViewPanel.IsVirtualizing 属性。或者在 XAML 中的 telerik:TreeViewPanel.IsVirtualizing 属性中绑定到新创建的 Is Virtualizing依赖属性。

希望你能解决:)

于 2013-07-08T16:31:16.037 回答