Virtualizingstackpanel Class: Namespace: Assembly: Presentationframework - DLL
Virtualizingstackpanel Class: Namespace: Assembly: Presentationframework - DLL
Definition
Namespace:
System.Windows.Controls
Assembly:
PresentationFramework.dll
Arranges and virtualizes content on a single line that is oriented either
horizontally or vertically.
C#Copy
public class VirtualizingStackPanel :
System.Windows.Controls.VirtualizingPanel,
System.Windows.Controls.Primitives.IScrollInfo
Inheritance
Object
DispatcherObject
DependencyObject
Visual
UIElement
FrameworkElement
Panel
VirtualizingPanel
VirtualizingStackPanel
Derived
System.Windows.Controls.Primitives.DataGridRowsPresenter
System.Windows.Controls.Ribbon.Primitives.RibbonMenuItemsPanel
Implements
IScrollInfo
Examples
The following example shows how to bind to an XML data source and virtualize
the items displayed in a ListBox element using Extensible Application Markup
Language (XAML). Notice that
the VirtualizingStackPanel.IsVirtualizing attached property is explicitly set
to true.
XAMLCopy
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
WindowTitle="VirtualizingStackPanel Sample"
Height="150"
VerticalAlignment="Top">
<Page.Resources>
<XmlDataProvider x:Key="Leagues" Source="Leagues.xml"
XPath="Leagues/League"/>
<DataTemplate x:Key="NameDataStyle">
<TextBlock Text="{Binding XPath=@name}" FontFamily="Arial" FontSize="12"
Foreground="Black"/>
</DataTemplate>
</Page.Resources>
<Border HorizontalAlignment="Left"
VerticalAlignment="Top"
BorderBrush="Black"
BorderThickness="2">
<ScrollViewer>
<StackPanel DataContext="{Binding Source={StaticResource Leagues}}">
<TextBlock Text="{Binding XPath=@name}" FontFamily="Arial"
FontSize="18" Foreground="Black"/>
<ListBox VirtualizingStackPanel.IsVirtualizing="True"
ItemsSource="{Binding XPath=Team}"
ItemTemplate="{DynamicResource NameDataStyle}"/>
</StackPanel>
</ScrollViewer>
</Border>
</Page>
XAMLCopy
<StackPanel>
<StackPanel.Resources>
<src:LotsOfItems x:Key="data"/>
</StackPanel.Resources>
</StackPanel>
The following example shows the data used in the previous example.
C#Copy
public class LotsOfItems : ObservableCollection<String>
{
public LotsOfItems()
{
for (int i = 0; i < 1000; ++i)
{
Add("item " + i.ToString());
}
}
}
Remarks
The standard layout system creates item containers and computes layout for each
item associated with a list control. The word "virtualize" refers to a technique by
which a subset of user interface (UI) elements are generated from a larger
number of data items based on which items are visible on-screen. Generating
many UI elements when only a few elements might be on the screen can
adversely affect the performance of your application.
The VirtualizingStackPanel calculates the number of visible items and works with
the ItemContainerGenerator from an ItemsControl (such as ListBox or ListView) to
create UI elements only for visible items.