﻿<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://developers.de/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Andreas Erben's posts : WPF</title><link />http://developers.de/blogs/andreas_erben/archive/tags/WPF/default.aspx<description>Tags: WPF</description><dc:language>en</dc:language><generator>CommunityServer 2008 SP1 (Build: 30619.63)</generator><item><title>WPF – where art thou’ my tools? Waiting for a pod of Orcas and other imperfections.</title><link />http://developers.de/blogs/andreas_erben/archive/2007/03/11/WPF-_1320_-where-art-thou_1920_-my-tools_3F00_-Waiting-for-a-horde-of-Orcas-and-other-imperfections_2E00_.aspx<pubdate>Sun, 11 Mar 2007 22:53:00 GMT</pubdate><guid ispermalink="false">7e491611-45ad-4dae-a68f-c4cb64439510:1215</guid><dc:creator>Andreas Erben</dc:creator><slash:comments>0</slash:comments><wfw:commentrss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://developers.de/blogs/andreas_erben/rsscomments.aspx?PostID=1215</wfw:commentrss><comments>http://developers.de/blogs/andreas_erben/archive/2007/03/11/WPF-_1320_-where-art-thou_1920_-my-tools_3F00_-Waiting-for-a-horde-of-Orcas-and-other-imperfections_2E00_.aspx#comments</comments><description>&lt;p&gt;When working with Windows Presentation Foundation (WPF) you quickly run into limitations of current tool support and also encounter unexpected limitations.&lt;br /&gt;This may or not change with the release of &amp;quot;Orcas&amp;quot;, however, at the time of the initial post, Orcas is not available. &lt;/p&gt;&lt;p&gt;This post will be updated whenever I stumble across something that simply bothers me. &lt;/p&gt;&lt;p&gt;To work with WPF your usual set of tools will be &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=F54F5537-CC86-4BF5-AE44-F5A1E805680D&amp;amp;displaylang=en"&gt;Visual Studio 2005 extensions for .NET Framework 3.0 (WCF &amp;amp; WPF), November 2006 CTP&lt;/a&gt;&lt;span style="font-size:15pt;"&gt; &lt;/span&gt;and potentially for the visually oriented folks: &lt;a href="http://www.microsoft.com/products/expression/en/Expression-Blend/default.mspx"&gt;Expression Blend&lt;/a&gt; and &lt;a href="http://www.microsoft.com/products/expression/en/Expression-Design/default.mspx"&gt;Expression Design&lt;/a&gt;. &lt;/p&gt;&lt;p&gt;The typical developer typically will root for a solid support inside of Visual Studio 2005 rather than for a program from the Expression series. &lt;/p&gt;&lt;p&gt;Intellisense won&amp;#39;t recognize valid XAML patterns because the XSD does not seem to be complete. &lt;/p&gt;&lt;p&gt;For example the &lt;a href="http://msdn2.microsoft.com/en-us/library/system.windows.datatemplate.aspx"&gt;DataTemplate&lt;/a&gt; MSDN code will not be supported by IntelliSense: &lt;/p&gt;&lt;div&gt;&lt;table style="border-collapse:collapse;"&gt;&lt;tr&gt;&lt;td style="padding-right:7px;padding-left:7px;padding-bottom:1px;padding-top:1px;border:black 0.5pt solid;"&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ListBox&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Width&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;400&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Margin&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;10&lt;/span&gt;&amp;quot;&lt;br /&gt;&lt;span style="color:red;"&gt;ItemsSource&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;{Binding Source={StaticResource myTodoList}}&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;strong&gt;&lt;em&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:#a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Text&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;{Binding Path=TaskName}&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; /&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Text&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;{Binding Path=Description}&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;TextBlock&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Text&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;{Binding Path=Priority}&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;StackPanel&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;DataTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/&lt;span style="color:#a31515;"&gt;ListBox.ItemTemplate&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;br /&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ListBox&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;Here DataTemplate and all childnodes of DataTemplate will not be recognized. &lt;/p&gt;&lt;p&gt;Other limitations include the visual designer that will just fail to load if you reference a namespace in the same assembly of the XAML included. &lt;/p&gt;&lt;p&gt;Take the start of the XAML of the ListBoxEvent sample from the SDK: &lt;/p&gt;&lt;div&gt;&lt;table style="border-collapse:collapse;"&gt;&lt;tr&gt;&lt;td style="padding-right:7px;padding-left:7px;padding-bottom:1px;padding-top:1px;border:black 0.5pt solid;"&gt;&lt;p&gt;&lt;span style="font-family:Courier New;"&gt;&lt;span style="font-size:10pt;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Canvas&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;strong&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&lt;strong&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color:red;"&gt;xmlns:x&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&lt;strong&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:red;"&gt;xmlns:src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;clr-namespace:ListBoxEvent&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;span style="font-size:10pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;span style="font-size:10pt;"&gt;&lt;span style="color:red;"&gt;x:Class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;ListBoxEvent.Pane1&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;&lt;strong&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;/strong&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;Because of the &lt;span style="font-family:Courier New;"&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="color:red;"&gt;xmlns:src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;clr-namespace:ListBoxEvent&lt;/span&gt;&amp;quot;&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;, the visual designer will tell you: &amp;quot;&lt;em&gt;Whoops! Visual Studio has encountered an error reading the designer file. The errors are shown in the task list. Make appropriate changes to the designer file and then click on the Design button to try again.&lt;/em&gt;&amp;quot; &lt;/p&gt;&lt;p&gt;In some cases also the method of then using a class of the referenced namespace as an &lt;em&gt;ObjectType=&amp;quot;x:Type src:MyTypeHere&amp;quot;&lt;/em&gt; in an ObjectDataProvider will not work and during the compile an error message will be raised that the class cannot be found. I have not been able to create a reasonably small example for that yet, though. &lt;/p&gt;&lt;p&gt;Worse: Even a commonly found way of displaying an image will mess up the designer: &lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Image&lt;/span&gt;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;MyImage&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;Source&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;..\..\Images\MyImage.bmp&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:Courier New;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;BitmapImage &lt;/span&gt;&lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;MyBitmapImage&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;UriSource&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;..\..\Images\MyBitmapImage.bmp&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;strong&gt;Other pain-points: &lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;XAML does not support generics yet. &lt;/p&gt;&lt;p&gt;There are folks who extend XAML, see the reference post by Mike Hillberg: &lt;a href="http://blogs.msdn.com/mikehillberg/archive/2006/10/06/LimitedGenericsSupportInXaml.aspx"&gt;Limited generics support in Xaml&lt;/a&gt; &lt;/p&gt;&lt;p&gt;The usual method is to use wrapper classes that inherit from a Generic (and usually have to fill the Generic in the constructor). &amp;nbsp; &lt;/p&gt;&lt;div&gt;&lt;table style="border-collapse:collapse;"&gt;&lt;tr&gt;&lt;td style="padding-right:7px;padding-left:7px;padding-bottom:1px;padding-top:1px;border:black 0.5pt solid;"&gt;&lt;pre&gt;&lt;code&gt;public class &lt;span style="color:#2b91af;"&gt;myColors&lt;/span&gt; : &lt;span style="color:#2b91af;"&gt;ObservableCollection&lt;/span&gt;&amp;lt;string&amp;gt;&lt;br /&gt;{&lt;br /&gt;     public myColors()&lt;br /&gt;     {&lt;br /&gt;          Add(&lt;span style="color:#a31515;"&gt;&amp;quot;LightBlue&amp;quot;&lt;/span&gt;);&lt;br /&gt;          Add(&lt;span style="color:#a31515;"&gt;&amp;quot;Pink&amp;quot;&lt;/span&gt;);&lt;br /&gt;          Add(&lt;span style="color:#a31515;"&gt;&amp;quot;Red&amp;quot;&lt;/span&gt;);&lt;br /&gt;          Add(&lt;span style="color:#a31515;"&gt;&amp;quot;Purple&amp;quot;&lt;/span&gt;);&lt;br /&gt;          Add(&lt;span style="color:#a31515;"&gt;&amp;quot;Blue&amp;quot;&lt;/span&gt;);&lt;br /&gt;          Add(&lt;span style="color:#a31515;"&gt;&amp;quot;Green&amp;quot;&lt;/span&gt;);&lt;br /&gt;      }&lt;br /&gt;}&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/div&gt;&lt;p&gt;&lt;em&gt;Note that this will also work with List&amp;lt;string&amp;gt; In a &amp;quot;one way&amp;quot; type of behaviour. &lt;/em&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;&lt;p&gt;However you could always use Generics from the C# code if you do something like: &lt;/p&gt;&lt;p&gt;MyListBox.ItemSource=MyGenericListObject;&lt;br /&gt;It is really just an issue about how XAML is getting parsed and not of WPF itself.&lt;br /&gt;I do not understand why it does not seem to be permissible to use the syntax (or something similar) that you encounter in comparable scenarios like:&lt;br /&gt;System.Collections.Generic.List&amp;#39;1[[System.String]]&lt;br /&gt;or &lt;br /&gt;System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.Int32, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] &lt;/p&gt;&lt;p&gt;(At least I have not been able to get it working) &lt;/p&gt;&lt;img src="http://developers.de/aggbug.aspx?PostID=1215" width="1" height="1"&gt;</description><category domain="http://developers.de/blogs/andreas_erben/archive/tags/.NET+3.0/default.aspx">.NET 3.0</category><category domain="http://developers.de/blogs/andreas_erben/archive/tags/VS+2005/default.aspx">VS 2005</category><category domain="http://developers.de/blogs/andreas_erben/archive/tags/Visual+Studio+2005/default.aspx">Visual Studio 2005</category><category domain="http://developers.de/blogs/andreas_erben/archive/tags/WPF/default.aspx">WPF</category><category domain="http://developers.de/blogs/andreas_erben/archive/tags/Windows+Presentation+Foundation/default.aspx">Windows Presentation Foundation</category></item></channel></rss>