<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JAPF &#187; architecture</title>
	<atom:link href="http://www.japf.fr/tag/architecture/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.japf.fr</link>
	<description>Jeremy Alles Presentation Foundation: WPF, Silverlight, Windows Phone 7, Windows 8</description>
	<lastBuildDate>Fri, 27 Jan 2012 07:57:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>WPF internals part 2 : how the WPF controls are organized ?</title>
		<link>http://www.japf.fr/2010/01/wpf-internals-how-the-wpf-controls-are-organised/</link>
		<comments>http://www.japf.fr/2010/01/wpf-internals-how-the-wpf-controls-are-organised/#comments</comments>
		<pubDate>Wed, 20 Jan 2010 19:35:32 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[architecture]]></category>

		<guid isPermaLink="false">http://www.japf.fr/?p=394</guid>
		<description><![CDATA[A couple of weeks ago, I started a series of articles about WPF internals organization. In the first article I did a tour of the core WPF classes. In this second part, I&#8217;m reviewing the organization of the various controls that exist in the framework. Because the image of the diagram is pretty big, I [...]]]></description>
			<content:encoded><![CDATA[<p>A couple of weeks ago, I started a series of articles about <a href="http://www.japf.fr/wpf-internals/">WPF internals</a> organization. In <a href="http://www.japf.fr/2009/10/wpf-internals-part-1-what-are-the-core-wpf-classes/">the first article</a> I did a tour of the core WPF classes. In this second part, I&#8217;m reviewing the organization of the various controls that exist in the framework.</p>
<p>Because the image of the diagram is pretty big, I decided to use Silverlight DeepZoom and the result is just below this text <img src='http://www.japf.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  You can download the <a href="http://www.japf.fr/wp-content/uploads/2010/01/WpfControlsFull.png" target="_blank" rel="lightbox[394]">full image resolution here</a>. Please use the full screen button in the upper right corner of the viewer for the best browsing experience.</p>
<p><script type="text/javascript">
        function onSilverlightError(sender, args) 
        {
            var appSource = "";
            if (sender != null &#038;&#038; sender != 0)
            {
                appSource = sender.getHost().Source;
            }
            var errorType = args.ErrorType;
            var iErrorCode = args.ErrorCode;</p>
<p>            var errMsg = "Unhandled Error in Silverlight 2 Application " + appSource + "\n";</p>
<p>            errMsg += "Code: " + iErrorCode + "    \n";
            errMsg += "Category: " + errorType + "       \n";
            errMsg += "Message: " + args.ErrorMessage + "     \n";</p>
<p>            if (errorType == "ParserError") 
            {
                errMsg += "File: " + args.xamlFile + "     \n";
                errMsg += "Line: " + args.lineNumber + "     \n";
                errMsg += "Position: " + args.charPosition + "     \n";
            }
            else if (errorType == "RuntimeError") 
            {
                if (args.lineNumber != 0) 
                {
                    errMsg += "Line: " + args.lineNumber + "     \n";
                    errMsg += "Position: " + args.charPosition + "     \n";
                }
                errMsg += "MethodName: " + args.methodName + "     \n";
            }</p>
<p>            throw new Error(errMsg);
        }
</script></p>
<div id="slPluginHost">
		<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="540" height="500"><param name="minRuntimeVersion" value="3.0.40307.0" /><param name="autoUpgrade" value="false" /><param name="source" value="http://www.japf.fr/silverlight/wpfcontrolsexplorer/WpfControlsExplorer.xap"/><param name="onerror" value="onSilverlightError" /><param name="background" value="white" /><param name="initParams" value="adFile=http://www.japf.fr/silverlight/wpfcontrolsexplorer/GeneratedImages" /><a href="http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;"><br />
                <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/><br />
            </a><br />
        </object><br />
	<iframe style='visibility:hidden;height:0;width:0;border:0px'></iframe>
</div>
<ul></ul>
<p>Here are general remarks that might help you get information from those diagrams.</p>
<p>The top level <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.control.aspx">Control</a> class:</p>
<ul>
<li>Defines general UI properties such as Background, Foreground, BorderBrush and BorderThickness</li>
<li>Defines a set of properties to control font rendering: FontFamily, FontSize, FontStyle&#8230;</li>
<li>Has a DoubleClick event (other mouse events such as MouseUp/MouseDown comes from the UIElement class)</li>
</ul>
<p>Below the <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.control.aspx">Control</a> class, we have (this list is not complete):</p>
<ul>
<li>The <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.contentcontrol.aspx">ContentControl</a> class: those controls have&#8230; a single Content</li>
<li>The <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.aspx">ItemsControls</a> class which handles a collection of child controls</li>
<li>The <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.textboxbase.aspx">TextBoxBase</a> class which is the parent of <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox.aspx">TextBox</a> and <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.richtextbox.aspx">RichTextBox</a></li>
<li>The <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.rangebase.aspx">RangerBase</a> class which handles a range (minimum, maximum) and which is the parent of the <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.scrollbar.aspx">ScrollBar</a>, <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.slider.aspx">Slider</a> and <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.progressbar.aspx">ProgressBar</a> classes</li>
<li>The <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.thumb.aspx">Thumb</a> class which has the ability to be dragged over a surface</li>
</ul>
<p>Below the <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.contentcontrol.aspx">ContentControl</a> class we can find many existing WPF controls:</p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.buttonbase.aspx">ButtonBase</a> and its child: <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.button.aspx">Button</a>, <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.togglebutton.aspx">ToggleButton</a> and <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.repeatbutton.aspx">RepeatButton</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.label.aspx">Label</a> (see <a href="http://joshsmithonwpf.wordpress.com/2007/07/04/differences-between-label-and-textblock/">this post</a> for an explanation of the differences between a Label and a TextBlock)</li>
<li><a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.listboxitem.aspx">ListBoxItem</a> and its children: <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.listviewitem.aspx">ListViewItem</a>, <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.comboboxitem.aspx">ComboBoxItem</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.scrollviewer.aspx">ScrollViewer</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.headeredcontentcontrol.aspx">HeaderedContentControl</a>, a <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.contentcontrol.aspx">ContentControl</a> that has both a Content and a Header. This is the case of the <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.expander.aspx">Expander</a>, <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.groupbox.aspx">GroupBox</a> and <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.tabitem.aspx">TabItem</a> controls</li>
<li><a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.tooltip.aspx">Tooltip</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/system.windows.window.aspx">Window</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.usercontrol.aspx">UserControl</a></li>
</ul>
<p>General other remarks:</p>
<ul>
<li>It&#8217;s funny to see that both Window and UserControl inherits from ContentControl. Before doing the diagram I though that Window came from somewhere else <img src='http://www.japf.fr/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </li>
<li>Having those diagrams in mind (or on a screen !) is very useful when you need to create your own custom control</li>
<li>We can see the differences between creating a custom control (inherit from Control or derived class) and a UserControl (inherit from UserControl)</li>
<li>.Net4 will introduce new controls (not in this diagram) in the WPF framework such: DataGrid, Calendar, TimePicker</li>
</ul>
<p><a href="http://www.dotnetkicks.com/kick/?url=http%3a%2f%2fwww.japf.fr%2f2010%2f01%2fwpf-internals-how-the-wpf-controls-are-organised%2f"><img src="http://www.dotnetkicks.com/Services/Images/KickItImageGenerator.ashx?url=http%3a%2f%2fwww.japf.fr%2f2010%2f01%2fwpf-internals-how-the-wpf-controls-are-organised%2f" border="0" alt="kick it on DotNetKicks.com" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.japf.fr/2010/01/wpf-internals-how-the-wpf-controls-are-organised/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>PDC09 : How VS2010 was built with WPF ?</title>
		<link>http://www.japf.fr/2009/11/pdc09-how-vs2010-was-built-with-wpf/</link>
		<comments>http://www.japf.fr/2009/11/pdc09-how-vs2010-was-built-with-wpf/#comments</comments>
		<pubDate>Thu, 26 Nov 2009 11:24:01 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[.Net]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Tools]]></category>
		<category><![CDATA[Visual Stutio]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[pdc]]></category>
		<category><![CDATA[vs2010]]></category>

		<guid isPermaLink="false">http://www.japf.fr/?p=362</guid>
		<description><![CDATA[In my last blog post, I did a review of a PDC09 Session &#8220;Advanced performance tuning with WPF&#8221;. Today, I&#8217;m doing a review for another very interesting session &#8220;How VS2010 was built with WPF ?&#8221;. The video is available here. Why did Microsoft choose WPF for VS2010 ? Technological: prove the capabilities of WPF4 Architectural [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.japf.fr/wp-content/uploads/2009/08/PDC09.jpg" rel="lightbox[362]"><img class="alignnone size-full wp-image-245" title="PDC09" src="http://www.japf.fr/wp-content/uploads/2009/08/PDC09.jpg" alt="PDC09" width="79" height="109" /></a></p>
<p>In my <a href="http://www.japf.fr/2009/11/pdc09-wpf-application-performance-tuning/">last blog post</a>, I did a review of a PDC09 Session &#8220;Advanced performance tuning with WPF&#8221;. Today, I&#8217;m doing a review for another very interesting session &#8220;<strong>How VS2010 was built with WPF</strong> ?&#8221;. The video is available <a href="http://microsoftpdc.com/Sessions/CL09">here</a>.</p>
<p style="text-align: center;"><a href="http://www.japf.fr/wp-content/uploads/2009/11/vs2008tovs2010.png" rel="lightbox[362]"><img class="size-large wp-image-365 aligncenter" title="vs2008tovs2010" src="http://www.japf.fr/wp-content/uploads/2009/11/vs2008tovs2010-1024x361.png" alt="vs2008tovs2010" width="543" height="191" /></a></p>
<p>Why did Microsoft choose WPF for VS2010 ?</p>
<ul>
<li>Technological: prove the capabilities of WPF4</li>
<li>Architectural
<ul>
<li>Separated presentation</li>
<li>Support for long range road map (+10 years)</li>
</ul>
</li>
<li>Key VS2010 features need it: Editor, Architecture Editor, Parallel tools debugging</li>
<li>Take an opportunity to give feedback for WPF4: when VS2010 development started, .Net 3.5 SP1 was just shipped and it was the right time to give feedback for the new features and fixes for WPF4.</li>
</ul>
<p>It is worth noting that VS2010 is a project that is being watched carefully inside Microsoft. We can expect that more Microsoft applications will move to WPF in the next coming years.</p>
<p>What WPF features are used ?</p>
<ul>
<li>Declarative UI using XAML</li>
<li>Databinding</li>
<li>Styles and templates</li>
<li>Application Resources</li>
<li>Interop Win32 (because they did not have the time to rewrite everything using WPF or because features doest not need to use WPF for example de WinForms designer&#8230;)</li>
<li>Integration with the message loop (to deal with particular focus issues)</li>
<li>New text stack (part of WPF4) based on DirectWrite</li>
</ul>
<p>Staged approach</p>
<ul>
<li>Define data models: a huge diagramming and architectural exercice</li>
<li>Replace the main window with WPF (only the window not its content !) to start the mix approach (managed/unmanaged, WPF/Hwnds)</li>
<li>Write new managed components: Window manager, command bar presentation</li>
<li>Scout with other VS teams</li>
<li>Test, Test, Test&#8230;</li>
</ul>
<p>What were the challenges ?</p>
<ul>
<li>Mixed mode application: native and managed code; WPF and HWNDs (Win32 or WinForms)</li>
<li>Keep existing extensions working and allow new extensions to take advantage of WPF</li>
<li>Don&#8217;t &#8220;stop the train&#8221; other teams were working at the same time on the product to add new functionalities</li>
<li>Text clarity</li>
<li>Performance</li>
<li>Focus management</li>
</ul>
<p>You can watch the session <a href="http://microsoftpdc.com/Sessions/CL09">here</a> if you want more detail and demos of what I mention in this post.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.japf.fr/2009/11/pdc09-how-vs2010-was-built-with-wpf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>French article about MVVM posted !</title>
		<link>http://www.japf.fr/2009/03/french-article-about-mvvm-posted/</link>
		<comments>http://www.japf.fr/2009/03/french-article-about-mvvm-posted/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 06:45:16 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[WPF]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[model-view-viewmodel]]></category>
		<category><![CDATA[mvvm]]></category>
		<category><![CDATA[patterns]]></category>
		<category><![CDATA[practises]]></category>

		<guid isPermaLink="false">http://www.japf.fr/?p=149</guid>
		<description><![CDATA[It&#8217;s finally online after a long work.I hope my french readers will enjoy it:  http://japf.developpez.com/tutoriels/dotnet/mvvm-pour-des-applications-wpf-bien-architecturees-et-testables/ Here is the abstract translated to english: &#8220;Inch by inch, the WPF technology is being adopted by .Net developers as a development platform for next generation user interfaces. This changeover is taking time and complicated because WPF changes principles that [...]]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s finally online after a long work.I hope my french readers will enjoy it:  <a href="http://japf.developpez.com/tutoriels/dotnet/mvvm-pour-des-applications-wpf-bien-architecturees-et-testables/">http://japf.developpez.com/tutoriels/dotnet/mvvm-pour-des-applications-wpf-bien-architecturees-et-testables/</a></p>
<p>Here is the abstract translated to english:</p>
<p><em>&#8220;Inch by inch, the WPF technology is being adopted by .Net developers as a development platform for next generation user interfaces. This changeover is taking time and complicated because WPF changes principles that are well known until now in the process of designing a user interface. The Model-View-ViewModel methodology helps formalize WPF developement by giving guidance that leads to apps cleary architectured, testable, and by optimizing the workflow between developer and designer.&#8221;</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.japf.fr/2009/03/french-article-about-mvvm-posted/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>XAML guidelines: interviews of WPF masters</title>
		<link>http://www.japf.fr/2009/01/xaml-guidelines-interviews-from-wpf-masters/</link>
		<comments>http://www.japf.fr/2009/01/xaml-guidelines-interviews-from-wpf-masters/#comments</comments>
		<pubDate>Mon, 05 Jan 2009 12:16:42 +0000</pubDate>
		<dc:creator>Jeremy</dc:creator>
				<category><![CDATA[WPF]]></category>
		<category><![CDATA[architecture]]></category>
		<category><![CDATA[blend]]></category>
		<category><![CDATA[practises]]></category>
		<category><![CDATA[xaml]]></category>

		<guid isPermaLink="false">http://www.japf.fr/?p=101</guid>
		<description><![CDATA[Getting back to work this morning, I opened my Google Reader to have a look at the RSS feeds I’m reading. I found a nice video on Channel9: “XAML Guidelines, Part 2”. The first episode, where Jaime Rodriguez interviews 3 people from Identity Mines is also available on Channel9 (unfortunately, the sound is rather poor [...]]]></description>
			<content:encoded><![CDATA[<p>Getting back to work this morning, I opened my Google Reader to have a look at the RSS feeds I’m reading.</p>
<p>I found a nice video on Channel9: <a href="http://channel9.msdn.com/shows/Continuum/XAML-Guidelines-Part-2/">“XAML Guidelines, Part 2”</a>. <a href="http://channel9.msdn.com/shows/Continuum/XAML-Guidelines-Part-1/">The first episode</a>, where Jaime Rodriguez interviews 3 people from Identity Mines is also available on Channel9 (unfortunately, the sound is rather poor on this episode…).</p>
<p>This time, Jaime meets up with Unni Ravindranathan from the Expression Blend team. During the shot, they open the Blend source code project inside Blend (sounds nice isn’t it :p). Unni explains the structure of the project, their conventions, how resources are used, etc.</p>
<p>I think Blend is an application we can learn a lot from. If you’re also interested to understand what architecture Blend uses, you can check out <a href="http://www.paulstovell.com/blog/expression-framework-versus-composite-wpf">this post</a> from Paul Stovell.</p>
<p>Here are some notes I took while watching the video:</p>
<ul>
<li>Blend is shipped with 2 themes: Expression Light &amp; Expression Dark</li>
<li>Blend resources are stored in (only !) 3 resources dictionaries</li>
<li>Resources are categorized into Colors, Brushes and Styles</li>
<li>Blend defines a set of margins and thicknesses that are used in the entire application to ensure a consistency across the different layouts</li>
<li>By convention, Name and Key properties are always defined first in the XAML</li>
<li>Properties might be spitted over several lines, if this is the case; properties are grouped together by types (style, size, appearance…)</li>
<li>Blend 3 will add extensibility and improve XAML code generation:
<ul>- Name will always be the first property</ul>
<ul>- Better control over how the XAML is formatted</ul>
</li>
<li>Name everything versus name nothing? Blend names almost everything, it helps UI automation</li>
<li>Static resources versus dynamic resources? No big performance impact, Blend mostly uses dynamic resources</li>
<li>When design time doesn’t work fine in Blend
<ul>- An exception can occur when Blend is creating the control because the running process is Blend itself and not the application we are creating</ul>
<ul>- Add tests to check if code is running in design mode (you can use System.ComponentModel.DesignerProperties.GetIsInDesignMode(DependencyObject) method)</ul>
<ul>- Debug Blend process by attaching an instance of Visual Studio to Blend</ul>
</li>
<li>Blend is a big application:
<ul>- 300 000 lines of XAML</ul>
<ul>- 500 000 lines of C#</ul>
</li>
</ul>
<p>If you want more information about fixing error that we can have in Blend (while the application works properly at run time), you can check out <a href="http://blogs.msdn.com/jaimer/archive/2007/01/21/tweaking-your-wpf-code-to-run-in-expression-blend.aspx">this post</a> of Jaime.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.japf.fr/2009/01/xaml-guidelines-interviews-from-wpf-masters/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

