WPF and XAML - HOWTO: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 36: | Line 36: | ||
==Virtualizing an ItemsControl== | ==Virtualizing an ItemsControl== | ||
<source lang="csharp"> | |||
<Style x:Key="ItemsControlVirtualisedStyle" | <Style x:Key="ItemsControlVirtualisedStyle" | ||
TargetType="ItemsControl"> | TargetType="ItemsControl"> |
Revision as of 07:03, 17 September 2014
Tools
Show Me The Template is a great tool for looking at default control templates
Visual Studio Designer
Troubleshooting WPF and Silverlight Designer Load Failures
http://msdn.microsoft.com/en-us/library/ff356886(VS.95).aspx
Debugging a Designer Load Failure
To debug a designer load failure
- Open a second instance of Visual Studio.
- From the Debug menu, choose Attach to Process.
The Attach To Process dialog box opens. - In the Available Processes section, select the instance of devenv.exe that is loading your XAML and click Attach.
The Visual Studio debugger attaches to the selected devenv.exe instance. - From the Debug menu, choose Exceptions.
The Exceptions dialog box opens. - In the Break when exception is list, find the Common Language Runtime Exceptions name, and then check the Thrown check box.
- Click OK.
- In the first Visual Studio instance that you are debugging, reload the XAML file.
The second instance of Visual Studio opens and displays the load exception.
Note: You can click Stop Debugging in the second instance of Visual Studio and the first instance keeps running
Formatting
Standard Date and Time Format Strings
XAML
Label without accelerator
<source lang="csharp">
<Label> <ContentPresenter RecognizesAccessKey="False" Content="_123"> </ContentPresenter> </Label>
</source>
Virtualizing an ItemsControl
<source lang="csharp">
<Style x:Key="ItemsControlVirtualisedStyle" TargetType="ItemsControl"> <Setter Property="VirtualizingStackPanel.IsVirtualizing" Value="True" /> <Setter Property="VirtualizingPanel.IsVirtualizingWhenGrouping" Value="True" /> <Setter Property="VirtualizingPanel.ScrollUnit" Value="Pixel" /> <Setter Property="ScrollViewer.CanContentScroll" Value="True" /> <Setter Property="ScrollViewer.PanningMode" Value="VerticalOnly" /> <Setter Property="ItemsPanel"> <Setter.Value> <ItemsPanelTemplate> <VirtualizingStackPanel /> </ItemsPanelTemplate> </Setter.Value> </Setter> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="ItemsControl"> <Border BorderThickness="{TemplateBinding Border.BorderThickness}" Padding="{TemplateBinding Control.Padding}" BorderBrush="{TemplateBinding Border.BorderBrush}" Background="{TemplateBinding Panel.Background}" SnapsToDevicePixels="True"> <ScrollViewer Padding="{TemplateBinding Control.Padding}" HorizontalScrollBarVisibility="Disabled" Focusable="False"> <ItemsPresenter SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" /> </ScrollViewer> </Border> </ControlTemplate> </Setter.Value> </Setter> </Style>
</source>
You have to set ScrollViewer.CanContentScroll="True" otherwise you will lose virtualization.
You could set VirtualizingStackPanel.VirtualizationMode="Recycling". This will reduce the numbers of times item containers are created.
Read more on UI virtualization here UI Virtualization | Zag Studio.