C# 在MSDN上找到它之前?我特别感兴趣的是默认模板哪里出了问题。这似乎并不能解决我的问题。 public class ListItem_Generic { public string Name { get; protected set; }
C# 在MSDN上找到它之前?我特别感兴趣的是默认模板哪里出了问题。这似乎并不能解决我的问题。 public class ListItem_Generic { public string Name { get; protected set; } ,c#,wpf,treeview,scroll,C#,Wpf,Treeview,Scroll,在MSDN上找到它之前?我特别感兴趣的是默认模板哪里出了问题。这似乎并不能解决我的问题。 public class ListItem_Generic { public string Name { get; protected set; } public ListItem_Generic(string Name = "") { this.Name = Name; } } public class ListItem_Single : ListItem_Generic { p
在MSDN上找到它之前?我特别感兴趣的是默认模板哪里出了问题。这似乎并不能解决我的问题。
public class ListItem_Generic
{
public string Name { get; protected set; }
public ListItem_Generic(string Name = "") { this.Name = Name; }
}
public class ListItem_Single : ListItem_Generic
{
public ListItem_Single(string Name = "") : base(Name) { }
}
public class ListItem_Multi : ListItem_Generic
{
public List<ListItem_Generic> Items { get; protected set; }
public ListItem_Multi(string Name = "", List<ListItem_Generic> Items = null)
: base(Name)
{
if (Items == null)
this.Items = new List<ListItem_Generic>();
else
this.Items = new List<ListItem_Generic>(Items);
}
}
public MainWindow()
{
InitializeComponent();
// Create a list of sample items and populate them
var lst = new List<ListItem_Generic>();
int MaxHeaders = 10000;
var rnd = new Random();
// Now generate 10 000 records. First select random amount of headers
int HeadersCount = rnd.Next(MaxHeaders);
for (int i = 0; i < HeadersCount; i++)
{
var Childrencount = rnd.Next(100);
var children = new List<ListItem_Generic>();
for (int j = 0; j < Childrencount; j++)
children.Add(new ListItem_Single("Child #"+j+" of parent #"+i));
lst.Add(new ListItem_Multi("Header #" + i + " (" + Childrencount + ")", children));
}
for (int i = 0; i < MaxHeaders - HeadersCount; i++)
lst.Add(new ListItem_Single("Line #" + i));
// Bind lstView to lst
lstView.ItemsSource = lst;
lstView.UpdateLayout();
}
<Window x:Class="Test_DataTemplates.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:loc="clr-namespace:Test_DataTemplates"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TreeView Name="lstView" VirtualizingPanel.IsVirtualizing="True">
<TreeView.Resources>
<HierarchicalDataTemplate DataType="{x:Type loc:ListItem_Multi}" ItemsSource="{Binding Path=Items}">
<Border Background="RosyBrown">
<TextBlock Text="{Binding Path=Name}" Foreground="White" FontWeight="Bold"/>
</Border>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="{x:Type loc:ListItem_Single}">
<TextBlock Text="{Binding Path=Name}"/>
</HierarchicalDataTemplate>
</TreeView.Resources>
</TreeView>
</Grid>
</Window>
VirtualizingStackPanel.VirtualizationMode="Standard"
<Style x:Key="{x:Type TreeView}" TargetType="{x:Type TreeView}">
<Setter Property="TreeView.Background" Value="Transparent"/>
<Setter Property="VirtualizingStackPanel.IsVirtualizing" Value="True"/>
<Setter Property="VirtualizingStackPanel.VirtualizationMode" Value="Recycling"/>
<Setter Property="TreeView.SnapsToDevicePixels" Value="True" />
<Setter Property="TreeView.OverridesDefaultStyle" Value="True" />
<Setter Property="ItemsControl.ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<VirtualizingStackPanel IsItemsHost="True"/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
<Setter Property="TreeView.Template">
<Setter.Value>
<ControlTemplate TargetType="TreeView">
<ScrollViewer Focusable="False" CanContentScroll="True" Padding="4">
<ItemsPresenter HorizontalAlignment="Stretch"/>
</ScrollViewer>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>