WPF and XAML - HOWTO
Revision as of 07:13, 6 October 2014 by WikiSysop (talk | contribs) (→AffectsMeasure or AffectsArrange)
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.
Raed more about WPF controls and performance here MSDN - Optimizing Performance: Controls
