<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">
  <channel>
    <title>Miro Miroslavov's blog</title>
    <description>Miro Miroslavov's blog</description>
    <link>http://blogs.telerik.com/MiroMiroslavov/Posts.aspx</link>
    <docs>http://backend.userland.com/rss</docs>
    <atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/MiroMiroslavovsBlog" /><feedburner:info uri="miromiroslavovsblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
      <title>RadDiagram Q2.2012 Roadmap </title>
      <description>&lt;p&gt;It was just a month ago when we released the first version of the &lt;a href="http://blogs.telerik.com/miromiroslavov/posts/12-02-21/raddiagram-architecture.aspx"&gt;RadDiagram control/framework&lt;/a&gt;&amp;nbsp;and now is time to share with you some plans about the future. We (and our partner and friend - &lt;a href="http://visualizationtools.net/default/"&gt;The Orbifold&lt;/a&gt;) are very committed to the RadDiagram success and becoming one of the top diagramming frameworks for WPF and Silverlight out there. We will be pushing new features and possibilities as much as possible as well as trying to reach different platforms.&lt;/p&gt; &lt;h2&gt;Official for Q2&lt;/h2&gt; &lt;p&gt;As you already know it is currently in&lt;strong&gt; beta state&lt;/strong&gt; (even we think it is more than a beta) but with the upcoming &lt;strong&gt;Q2.2012 release the RadDiagram will become official control&lt;/strong&gt;. That is not the only major thing that is coming; we are already working on lots of new cool features and examples. Let me just name a few:&lt;/p&gt; &lt;h2&gt;New Features&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;Shapes
    &lt;ul&gt; &lt;li&gt;Hierarchical &lt;strong&gt;groups &lt;/strong&gt;- you'll be able to group shapes&amp;nbsp;together&amp;nbsp;and manipulate them accordingly.&amp;nbsp;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Custom connectors&lt;/strong&gt;&amp;nbsp;- specify exact point on the shape where a connection could be pinned.&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;Connections
    &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Bezier &lt;/strong&gt;curves - read more about Bezier &lt;a href="http://en.wikipedia.org/wiki/B%C3%A9zier_curve"&gt;here&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Polyline &lt;/strong&gt;improvements&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Routing &lt;/strong&gt;improvements&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;Diagram export
    &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Printing&lt;/strong&gt;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Export to Image&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;Diagram Canvas improvements
    &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Rulers&lt;/strong&gt;&amp;nbsp;- we'll add vertical and horizontal rulers for easier positioning of the shapes.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Thumbnail &lt;/strong&gt;(mini-map) view - this is a very cool feature. The control will visualize the whole diagram "world" and what part of it you're seeing.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Auto-layout&lt;/strong&gt; and auto-aligning&lt;/li&gt; &lt;li&gt;Improved handling of &lt;strong&gt;dropped content&lt;/strong&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Tree layout &lt;/strong&gt;and variations - this is something huge. You'll be able to easily choose between different types of tree layouts like mindmap, tip-over-tree or radial trees and forests.&lt;/li&gt; &lt;li&gt;New &lt;strong&gt;Extension assembly&lt;/strong&gt; - It will&amp;nbsp;contain the Toolbox&amp;nbsp;control and some other cool stuff to help you create easily diagramming applications. It will be prety much like the current Features assembly that is part of the demos distribution.&lt;/li&gt; &lt;/ul&gt; &lt;h2&gt;New Samples&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Mindmap &lt;/strong&gt;example - we are creating a &lt;a href="http://en.wikipedia.org/wiki/Mind_map"&gt;mindmap &lt;/a&gt;example that will&amp;nbsp;demonstrate&amp;nbsp;the power of the RadDiagram framework.&amp;nbsp;&lt;/li&gt; &lt;/ul&gt; &lt;h2&gt;Connection Routing&lt;/h2&gt; &lt;p&gt;Connection routing is an algorithm or a set of algorithms that should "trace" the route of link/connection, that takes into account the other nodes/shapes and some other&amp;nbsp;heuristics.&lt;/p&gt; &lt;p&gt;&lt;img src="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/routing.sflb?width=600&amp;amp;height=600&amp;amp;decreaseOnly=true" alt="Routing" /&gt;&lt;/p&gt; &lt;h2&gt;
Tree Layouts
&lt;/h2&gt; &lt;p&gt;Have a look at few&amp;nbsp;screenshots of the RadDiagram&amp;nbsp;showing the new tree layouts.&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;img alt="" src="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/circle.sflb?width=600&amp;amp;height=600&amp;amp;decreaseOnly=true" /&gt;&lt;/p&gt; &lt;p&gt;&lt;img alt="" src="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/treelayout.sflb?width=600&amp;amp;height=600&amp;amp;decreaseOnly=true" /&gt;&lt;/p&gt; &lt;p&gt;&lt;img alt="" src="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/mindmap.sflb?width=600&amp;amp;height=600&amp;amp;decreaseOnly=true" /&gt;&lt;/p&gt; &lt;p&gt;&lt;img alt="" src="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/tipovertree.sflb?width=600&amp;amp;height=600&amp;amp;decreaseOnly=true" /&gt;&lt;/p&gt; &lt;p&gt;That is our current plan, but stay tuned for more information on the RadDiagram. Your feedback and ideas are more than welcomed.&amp;nbsp;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MiroMiroslavovsBlog/~4/H6-r6d6HeMo" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/MiroMiroslavovsBlog/~3/H6-r6d6HeMo/raddiagram-q2-2012-roadmap.aspx</link>
      <author>Miro Miroslavov</author>
      <comments>http://blogs.telerik.com/MiroMiroslavov/Posts/12-03-20/raddiagram-q2-2012-roadmap.aspx</comments>
      <guid isPermaLink="false">9f477f74-f93f-47c1-bc53-56b3ab14821d</guid>
      <pubDate>Tue, 20 Mar 2012 07:25:00 GMT</pubDate>
    <feedburner:origLink>http://blogs.telerik.com/MiroMiroslavov/Posts/12-03-20/raddiagram-q2-2012-roadmap.aspx</feedburner:origLink></item>
    <item>
      <title>A financial dashboard designer based on RadDiagram</title>
      <description>&lt;h2&gt;by&amp;nbsp;&lt;a href="http://orbifold.net/default/"&gt;Francois Vanderseypen&lt;/a&gt;&amp;nbsp;and&amp;nbsp;Miroslav Miroslavov&lt;/h2&gt; &lt;p&gt;&lt;strong&gt;»&lt;/strong&gt; &lt;a href="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/DashboardDesigner.sflb"&gt;Full source code of the demo application here&lt;/a&gt;&lt;/p&gt; &lt;p&gt;The &lt;strong&gt; &lt;a href="http://www.telerik.com/help/wpf/raddiagram-overview.html" title="RadDiagram" target="_blank"&gt;new RadDiagram framework&lt;/a&gt;&lt;/strong&gt; brings, together with a host of new exciting things in Telerik's 2012 Q1 release, a new world of possibilities to the WPF and Silverlight community. This article attempts to show you that Telerik's RadDiagram is &lt;strong&gt;easy-to-use&lt;/strong&gt; and that it differs from other Telerik controls in that it more closely &lt;strong&gt;represents a framework than a control&lt;/strong&gt;. It’s an invitation to augment and customize the RadDiagram toolset in function of your application and business context. That said, we have to tell you straight away that RadDiagram, as released with Q1, is just the beginning. We have at this point put down the foundations for lots of exciting things to come and you can expect to see this RadDiagram branch off in various directions in coming releases. Great care and much energy were put in making it a flexible, robust, and broad framework for future developments. We have tried to make your (and our) task of &lt;strong&gt;customizing things easy while retaining the possibility to make the complex possible&lt;/strong&gt;.&amp;nbsp;&lt;/p&gt; &lt;p&gt;The dashboard designer described in this article aims to highlight various development tasks related to RadDiagram and how to integrate it into a real-world LOB application. It also tries to underline the fact that the diagramming world is a very broad subject on many levels. In its most basic form a diagram (graph, network) is just a set of shapes and lines connecting these shapes, but diagramming frameworks are also used for a wild spectrum of other tasks:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;For so-called&amp;nbsp; HMI (&lt;a title="Wikipedia on HMI" href="http://en.wikipedia.org/wiki/Human-machine_interface" target="_blank"&gt;human-machine interface&lt;/a&gt;) diagrams where the shapes contain data from sensors and other real-time data providers&lt;/li&gt; &lt;li&gt;In geographic maps
    &lt;a href="http://en.wikipedia.org/wiki/Automatic_label_placement" title="Wikipedia on automatic label placement"&gt;to position labels&lt;/a&gt; (using appropriate layout algorithms) and to calculate shortest paths or other extremum, graph-based things&lt;/li&gt; &lt;li&gt;To design
    &lt;a href="http://en.wikipedia.org/wiki/Workflow_application" target="_blank" title="Wikipedia on workflows"&gt;workflows&lt;/a&gt; in which case shapes and connections are tightly bound to an underlying API&lt;/li&gt; &lt;li&gt;To simulate processes and represent data logic (so-called
    &lt;a href="http://en.wikipedia.org/wiki/System_dynamics" target="_blank" title="Wikipedia on system dynamics"&gt;system dynamics&lt;/a&gt;) in which case the graph effectively represents a flow of data and logical switches. The typical example being the diagrams used in rendering applications where texture and material properties are modeled through graphs.&lt;/li&gt; &lt;li&gt;For
    &lt;a href="http://en.wikipedia.org/wiki/Data_visualization" title="Wikipedia on data visualization"&gt;data visualizations&lt;/a&gt; and data analysis; social networks and IP networks, for example&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;table border="0" cellspacing="0" cellpadding="0" style="border: none;  margin-left: 11.35pt; border-collapse: collapse; border-image: initial;"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top"&gt; &lt;img alt="" src="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/pic1.sflb?decreaseOnly=true" /&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt; &lt;em&gt;[Picture above] Typical dashboard in our sample application representing an overview of stock-related data coming from Yahoo Finance.&lt;/em&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Yet another context wherein diagrams come in handy is when you need a flexible surface on which you need to drop elements to design a document or data dashboard. While graphs are intrinsically related to links and connections, nothing prevents you from using a diagram framework without them and thus reduce it to a layout or design engine (a form designer anyone?). Our financial dashboard designer uses the RadDiagram surface in both ways;&lt;strong&gt; to design data dashboards&lt;/strong&gt; (no connections here) and &lt;strong&gt;to represent the hierarchical structure&lt;/strong&gt; of these dashboards (relationship graph).&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;table border="0" cellspacing="0" cellpadding="0" style="border: none;  margin-left: 12.5pt; border-collapse: collapse; border-image: initial;"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top"&gt; &lt;p&gt;&lt;img alt="" src="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/pic2.sflb?decreaseOnly=true" /&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt; &lt;em&gt;[Picture above] The very same RadDiagram surface which presents a digital dashboard is re-used to display the relationships contained within different dashboards by inspecting the hyperlinks between the screens.&lt;/em&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;How does the application gets its relational structure? Put simply, the hyperlinks you add on a dashboard can be internal; you can create a link which jumps to another dashboard page much like hyperlinks in a web site.&lt;/p&gt; &lt;table border="0" cellspacing="0" cellpadding="0" style="border: none;  margin-left: 11.35pt; border-collapse: collapse; border-image: initial;"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top"&gt; &lt;p&gt;&lt;img alt="" src="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/pic3.sflb?decreaseOnly=true" /&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt; &lt;em&gt;[Picture above] Example of an internal link in a dashboard page.&lt;/em&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;table border="0" cellspacing="0" cellpadding="0" style="border: none;  margin-left: 11.35pt; border-collapse: collapse; border-image: initial;"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top"&gt; &lt;p&gt;&lt;img alt="" src="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/pic4.sflb?decreaseOnly=true" style="width: 400px; height: 256px;" /&gt;&lt;/p&gt; &lt;/td&gt; &lt;td valign="top"&gt; &lt;em&gt;[Picture left]The link editor (which pops up on double-clicking a link) allows you to add an internal link to another dashboard page or to an arbitrary (external) address.&lt;/em&gt;&lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The important bit here is the fact that across the application &lt;strong&gt;there is only one RadDiagram instance&lt;/strong&gt; used in multiple ways and that all the dynamics occur through the (de)serialization. In fact, the generic flow in the application is as follows:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;At any moment there is only one active page which corresponds to a diagram. You can remove or add pages as you please, but only one is active at a time, much like a TabControl tab-page in fact. &lt;/li&gt; &lt;li&gt;From the toolbox data elements can be drag-dropped onto the diagram (dashboard) and real-time data is fetched from the Yahoo Finance service (you need to specify a stock symbol, of course).&lt;/li&gt; &lt;li&gt;The elements can be customized, if needed, by double-clicking them.&lt;/li&gt; &lt;li&gt;When a page is saved it's being serialized to the isolated storage space and the hyperlinks are analyzed thus creating a graph (an hypergraph in fact) of relations between pages/dashboards.&lt;/li&gt; &lt;li&gt;Whenever a page is loaded from the storage the corresponding diagram XML is deserialized.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;table border="0" cellspacing="0" cellpadding="0" style="border: none;  margin-left: 11.35pt; border-collapse: collapse; border-image: initial;"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top"&gt; &lt;p&gt; &lt;img alt="A dashboard page in edit mode" title="A dashboard page in edit mode" src="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/pic5.sflb?decreaseOnly=true" /&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt; &lt;p&gt;&lt;em&gt;[Picture above] A dashboard page in design mode shows some additional elements in the UI: the toolbox and the toolbar. Through these you can achieve a very diverse set of data pages. In addition, it’s really easy to add your own toolbox items.&lt;/em&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt;This flow demonstrates the following aspects of RadDiagram:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The flexible serialization pipeline you can plug into to include your application-specific data.&lt;/li&gt; &lt;li&gt;The ease with which you can customize the RadDiagram toolbox to incorporate your own bits.&lt;/li&gt; &lt;li&gt;The way you can use the many switches and properties of the diagramming surface to model a particular behavior, enabling/disabling e.g. connections, resizing, rotation, and so on.&lt;/li&gt; &lt;li&gt;The speedy loading and unloading of diagrams, which effectively enables a multi-view paradigm, bypassing the need for a TabControl &lt;/li&gt; &lt;li&gt;The way you can use diagramming shapes as containers for other Telerik controls, for your own data or to act as recipients for real-time data sources&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Now that you have an overview of what the demo application does and its various features let’s dig a bit more into the technical details.&lt;/p&gt; &lt;h1&gt;A note on the Yahoo Finance API&lt;/h1&gt; &lt;p&gt;The dashboard designer uses realtime financial information from the &lt;a href="http://finance.yahoo.com/"&gt;Yahoo Finance&lt;/a&gt; API:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;You can drag-drop the 'company profile' shape onto the diagram surface and it will fetch the company profile for the stock symbol of your choice. &lt;/li&gt; &lt;li&gt;General financial information, timeline graph and other data can be fetched in the same way. Each type of information is presented in a different shape (format) and demonstrates how you can combine Telerik's controls into the RadDiagram framework&lt;/li&gt; &lt;li&gt;RSS news feeds can be appended&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;The code to access the Yahoo Finance API is quite straightforward and one can, of course, reuse these controls and the underlying code for other data sources. &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;table border="0" cellspacing="0" cellpadding="0" style="border: none;  margin-left: 11.35pt; border-collapse: collapse; border-image: initial;"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top"&gt; &lt;p&gt; &lt;img alt="Sample Yahoo Finance output in a custom shape" title="Sample Yahoo output in a custom shape" src="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/pic6.sflb" style="width: 400px; height: 182px;" /&gt;&lt;/p&gt; &lt;/td&gt; &lt;td valign="top"&gt; &lt;p&gt;&lt;em&gt;[Picture left] Sample output of the Yahoo API which lets you query the stock details of an arbitrary symbol (here show is ‘MSFT’).&lt;/em&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;h1&gt;Creating custom shapes with RadDiagram&lt;/h1&gt; &lt;p&gt;The RadDiagram framework comes with a standard set of flowcharting shapes (geometry shapes) but &lt;strong&gt;this shouldn't prevent you from enlarging it with your own set&lt;/strong&gt;. In fact, diagramming is such a vast domain and its integration within the business context is so tight that any diagramming framework would fail to deliver a complete set of shapes. Rather than trying to offer lots of &lt;strong&gt;shapes RadDiagram offers you a flexible and straightforward route to designing custom shapes&lt;/strong&gt; and embedding (Telerik or third-party) controls.&lt;/p&gt; &lt;table border="0" cellspacing="0" cellpadding="0" style="border: none;  margin-left: 11.35pt; border-collapse: collapse; border-image: initial;"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top"&gt; &lt;p&gt; &lt;img alt="RadGauge inside a RadDiagram shape" title="RadGauge inside a RadDiagram shape" src="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/pic7.sflb?decreaseOnly=true" /&gt;&lt;/p&gt; &lt;/td&gt; &lt;td valign="top"&gt; &lt;p&gt;&lt;em&gt;[Picture left] Sample custom RadDiagram shape hosting a RadChart control,which displays the latest trade price as well as the procentual change.&lt;/em&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;The generic recipe for creating a custom shape goes as follows:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Inherit from a base class, either RadDiagramShapeBase or RadDiagramShape. The latter one contains a Geometry property, if you need to have some geometry inside your shape. &lt;/li&gt; &lt;li&gt;Design a control or content template in XAML. This is the point where you can go wild in combining the Telerik controls and all the goodness of the XAML framework.&lt;/li&gt; &lt;li&gt;Optional: Add some (dependency) properties reflecting the business context. For example, in the custom shapes provided with the sample you’ll often see the stock Symbol property defined.&lt;/li&gt; &lt;li&gt;Optional: Override a couple of serialization methods, if the custom properties need to be saved/loaded/copied.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Let’s take, as an example, the &lt;strong&gt;GaugeShape&lt;/strong&gt; from the sample, which (see adjacent picture) displays the latest price and price change of a stock. The shape inherits from RadDiagramShape&lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;public&lt;/code&gt; &lt;code style="color: #006699; font-weight: bold;"&gt;sealed&lt;/code&gt; &lt;code style="color: #000000;"&gt;GaugeShape :RadDiagramShape&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;and defines a custom Symbol dependency property&lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;public&lt;/code&gt; &lt;code style="color: #006699; font-weight: bold;"&gt;static&lt;/code&gt; &lt;code style="color: #006699; font-weight: bold;"&gt;readonly&lt;/code&gt; &lt;code style="color: #000000;"&gt;DependencyProperty SymbolProperty = DependencyProperty.Register(&lt;/code&gt;&lt;code style="color: blue;"&gt;"Symbol"&lt;/code&gt;&lt;code style="color: #000000;"&gt;, &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;typeof&lt;/code&gt;&lt;code style="color: #000000;"&gt;(&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;string&lt;/code&gt;&lt;code style="color: #000000;"&gt;), &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;typeof&lt;/code&gt;&lt;code style="color: #000000;"&gt;(GaugeShape), &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;new&lt;/code&gt; &lt;code style="color: #000000;"&gt;FrameworkPropertyMetadata(&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;null&lt;/code&gt;&lt;code style="color: #000000;"&gt;, OnSymbolChanged));&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt; Whether it’s a standard or a dependency property depends really on what you want to do with it, see
&lt;a href="http://msdn.microsoft.com/en-us/library/ms752914.aspx" title="Dependency properties" target="_blank"&gt;the MSDN documentation&lt;/a&gt; on this. &lt;/p&gt; &lt;p&gt;Next, you need to define the visual appearance of the control. Here is an important point you need to consider; do you need the adorning elements (resizing adorner, connectors, rotation handle) of the RadDiagram framework to appear? If so, the easiest way is to base your XAML style on the base style (using the BasedOn property) from the framework;&lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Style&lt;/code&gt; &lt;code style="color: #808080;"&gt;TargetType&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{x:Type local:GaugeShape}"&lt;/code&gt; &lt;code style="color: #808080;"&gt;BasedOn&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{StaticResource {x:Type telerik:RadDiagramShape}}"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;As a result, all the adorning diagramming elements are already present and your custom shape will take part in the internal mechanics of RadDiagram. If you omit the directive, then the shape will still be part of the diagram, but you will not see or be able to use the resizer, rotation handle, and so on.&lt;/p&gt; &lt;p&gt;From this point on you can define inside the style all you wish, but there are some gotchas:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The ContentTemplate does not immediately give access to the (dependency) properties of the class, but instead exposeses the Content property. So, if you want to access the DataContext inside the Content template you have to either assign this data context to the Content, or you need to walk up the visual tree a bit (see below).&lt;/li&gt; &lt;li&gt;The EditTemplate can be (and usually is) a totally different template than the ContentTemplate; it allows you to define how the control looks when the user double-clicks the shape and shifts to ‘edit’ mode. A good pattern here would be to set some data in the DataContext, assign the DataContext to the Content, and to access this data bucket both from the ContentTemplate and the EditTemplate. In situations where the EditTemplate is not sufficient you can hook up the routed DoubleClick event and redirect the default editing behavior (showing the EditTemplate) to some custom behavior. For example, in the sample you will notice that the TextShape shows a custom window on double-clicking. One essential elements here is that you need to halt the event bubbling by setting ‘Handled = true’ otherwise you will have both a custom handler active and the EditTemplate visible.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;In the content template of the GaugeShape you will see the following bits:&lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;TextBlock&lt;/code&gt; &lt;code style="color: #808080;"&gt;Text&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{Binding Path=Name}"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Foreground&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{StaticResource MetroAccentBrush}"&lt;/code&gt; &lt;code style="color: #808080;"&gt;FontWeight&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Bold"&lt;/code&gt; &lt;code style="color: #808080;"&gt;HorizontalAlignment&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Center"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt; &amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerik:RadRadialGauge&lt;/code&gt; &lt;code style="color: #808080;"&gt;OuterBorderBrush&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"#FF08FF00"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Grid.Row&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"1"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Background&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"WhiteSmoke"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;The TextBlock accesses the Name property because the Content contains the Quote information:&lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;var quote = &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;new&lt;/code&gt; &lt;code style="color: #000000;"&gt;Quote(Symbol);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;YahooEngine.Fetch(&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;new&lt;/code&gt; &lt;code style="color: #000000;"&gt;List&amp;lt;Quote&amp;gt; { quote }); &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;this&lt;/code&gt;&lt;code style="color: #000000;"&gt;.Content = quote;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;On the other hand, if you want your shape to be stretched and resized according to the outer resizing adorners, you should set the following properties:&lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Setter&lt;/code&gt; &lt;code style="color: #808080;"&gt;Property&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"HorizontalContentAlignment"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Value&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Stretch"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt; &amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Setter&lt;/code&gt; &lt;code style="color: #808080;"&gt;Property&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"VerticalContentAlignment"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Value&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Stretch"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;Finally, in order to have the Symbol property persistent, you need to tell the framework how to serialize it. While this might sound complicated we really made it simple for you to perform this step. &amp;nbsp;The serialization of a property (say, the Symbol property) amounts to adding an entry in a dictionary:&lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;public&lt;/code&gt; &lt;code style="color: #006699; font-weight: bold;"&gt;override&lt;/code&gt; &lt;code style="color: #000000;"&gt;SerializationInfo Serialize() {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;var info = &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;base&lt;/code&gt;&lt;code style="color: #000000;"&gt;.Serialize();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;info[“Symbol”] = &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;this&lt;/code&gt;&lt;code style="color: #000000;"&gt;.Symbol ?? &lt;/code&gt;&lt;code style="color: blue;"&gt;""&lt;/code&gt;&lt;code style="color: #000000;"&gt;; &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;return&lt;/code&gt; &lt;code style="color: #000000;"&gt;info; }&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;Conversely, if you want to pick up the saved value of the Symbol property you just ask the dictionary for the value:&lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;public&lt;/code&gt; &lt;code style="color: #006699; font-weight: bold;"&gt;override&lt;/code&gt; &lt;code style="color: #006699; font-weight: bold;"&gt;void&lt;/code&gt; &lt;code style="color: #000000;"&gt;Deserialize(SerializationInfo info) { &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;base&lt;/code&gt;&lt;code style="color: #000000;"&gt;.Deserialize(info); &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;if&lt;/code&gt; &lt;code style="color: #000000;"&gt;(info[“Symbol”] != &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;null&lt;/code&gt;&lt;code style="color: #000000;"&gt;) &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;this&lt;/code&gt;&lt;code style="color: #000000;"&gt;.Symbol = info[SymbolTag].ToString(); }&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;There is more under the hood than this straightforward serialization alone, please consult
&lt;a href="http://www.telerik.com/help/wpf/raddiagram-overview.html" title="RadDiagram documentation" target="_blank"&gt;the RadDiagram documentation&lt;/a&gt; for more serialization goodies.&lt;/p&gt; &lt;p&gt;Once all this is in place you can add the custom shape to the diagram and bind it to the application data like so:&lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;var shape = &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;new&lt;/code&gt; &lt;code style="color: #000000;"&gt;GaugeShape&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;Position = &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;new&lt;/code&gt; &lt;code style="color: #000000;"&gt;Point(10, 120) &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;};&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;Diagram.AddShape(shape);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt; &lt;strong&gt;Many more possibilities and extension points are at your disposal&lt;/strong&gt;, several of which are demonstrated in the custom shapes inside the sample application. This elementary overview, however,should get you going and we have made the documentation as complete as possible to guide you through the ins and outs of the RadDiagram framework.&lt;/p&gt; &lt;h1&gt;The toolbox: how to add your custom items&lt;/h1&gt; &lt;p&gt;The RadDiagram framework does not provide a Toolbox control out-of-the-box. It is too specific a part of the story and could just be used for some diagramming applications. That said, it is not part of the core framework, but we wrote several lines of code that can be used and easily customized for your needs. There is an Assembly that we called Features (Telerik.Windows.Diagrams.Features.dll), which is an extension of the core RadDiagram framework, and contains some nice features. For example, there is a ToolBox control there. It is a very simple Hierarchical ItemsControl that you can populate with a hierarchical data source or manually with ToolBoxGroups and items. On the other hand, the items are not much more than ContentControl, so you can
effectively add any UI Elements you would like to the toolbox(i.e. you can even add regular shapes from the RadDiagram framework)&lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;expandertoolbox:DiagramToolbox&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt; &amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;expandertoolbox:ToolboxGroup&lt;/code&gt; &lt;code style="color: #808080;"&gt;Header&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Shapes"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt; &amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;expandertoolbox:ToolboxItem&lt;/code&gt; &lt;code style="color: #808080;"&gt;Header&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Rectangle"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Description&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"A simple rectangle"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt; &amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;local:ShapeToolboxItem&lt;/code&gt; &lt;code style="color: #808080;"&gt;Geometry&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{telerik:CommonShape ShapeType=RoundedRectangleShape}"&lt;/code&gt;&lt;code style="color: #000000;"&gt;/&amp;gt; &amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;expandertoolbox:ToolboxItem&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt; &amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;expandertoolbox:ToolboxItem&lt;/code&gt; &lt;code style="color: #808080;"&gt;Header&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Ellipse"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Description&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"A simple rectangle"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt; &amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;local:ShapeToolboxItem&lt;/code&gt; &lt;code style="color: #808080;"&gt;Geometry&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{telerik:CommonShape ShapeType=EllipseShape}"&lt;/code&gt;&lt;code style="color: #000000;"&gt;/&amp;gt; &amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;expandertoolbox:ToolboxItem&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt; &amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;expandertoolbox:ToolboxGroup&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt; &amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;expandertoolbox:DiagramToolbox&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;But the interesting part here is how to handle the drop from the Toolbox to the diagram surface. To make our lives easier, we’re using the Telerik DragDropManager, which automatically handles the start-drag operation of the toolbox item. Thus we need to handle the drop operation at the other side, on the diagram surface.&amp;nbsp;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;this.diagram.Drop += this.OnDropToolboxItem;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;Let’s take a look at the handler as well.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;var item = (e.Data &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;as&lt;/code&gt; &lt;code style="color: #000000;"&gt;DataObject).GetData(&lt;/code&gt;&lt;code style="color: blue;"&gt;"Telerik.Windows.Diagrams.Features.ExpanderToolbox.ToolboxItem"&lt;/code&gt;&lt;code style="color: #000000;"&gt;) &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;as&lt;/code&gt; &lt;code style="color: #000000;"&gt;ToolboxItem; &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;if&lt;/code&gt; &lt;code style="color: #000000;"&gt;(item != &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;null&lt;/code&gt;&lt;code style="color: #000000;"&gt;) {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 21px !important;"&gt;&lt;code style="color: #000000;"&gt;IToolboxItem toolboxItem = item.Content &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;as&lt;/code&gt; &lt;code style="color: #000000;"&gt;IToolboxItem;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 21px !important;"&gt;&lt;code style="color: #000000;"&gt;RadDiagramShape shape = &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;null&lt;/code&gt;&lt;code style="color: #000000;"&gt;;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 21px !important;"&gt;&lt;code style="color: #000000;"&gt;var position = e.GetPosition(&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;this&lt;/code&gt;&lt;code style="color: #000000;"&gt;.diagram); &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;if&lt;/code&gt;&lt;code style="color: #000000;"&gt;(toolboxItem != &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;null&lt;/code&gt;&lt;code style="color: #000000;"&gt;) {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 33px !important;"&gt;&lt;code style="color: #000000;"&gt;shape = toolboxItem.CreateShape(position); } &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;if&lt;/code&gt; &lt;code style="color: #000000;"&gt;(shape != &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;null&lt;/code&gt;&lt;code style="color: #000000;"&gt;) { &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;this&lt;/code&gt;&lt;code style="color: #000000;"&gt;.diagram.AddShape(shape);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 33px !important;"&gt;&lt;code style="color: #000000;"&gt;e.Handled = &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;true&lt;/code&gt;&lt;code style="color: #000000;"&gt;; } }&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt;
&amp;nbsp;
&lt;p&gt;The trickier part is that each type of ToolboxItem implements the CreateShape factory method (from the IToolboxItem interface), which creates a new, configured shape for this type of toolbox item.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div class="reCodeBlock" style="border:1px solid #7f9db9;border-image: initial; overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;public&lt;/code&gt; &lt;code style="color: #006699; font-weight: bold;"&gt;override&lt;/code&gt; &lt;code style="color: #000000;"&gt;RadDiagramShape CreateShape(Point position) {&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;var shape = &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;new&lt;/code&gt; &lt;code style="color: #000000;"&gt;ImageShape { Location = &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;this&lt;/code&gt;&lt;code style="color: #000000;"&gt;.ImageLocation, Address = &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;this&lt;/code&gt;&lt;code style="color: #000000;"&gt;.Address, Position = position, NavigateUri = &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;this&lt;/code&gt;&lt;code style="color: #000000;"&gt;.NavigateUri }; &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;return&lt;/code&gt; &lt;code style="color: #000000;"&gt;shape; }&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;h1&gt;The RadDiagram surface properties&lt;/h1&gt; &lt;p&gt;There is one more interesting story in this application: How to switch between Edit and Design surface modes. The &lt;strong&gt;RadDiagram framework provides you with plenty of properties &lt;/strong&gt;that can control the read-only state in different aspects. Mentioning these properties here affects the run-time through UI behavior and does not enforce changes through the APIs.&lt;/p&gt; &lt;p&gt;They are:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;IsEditable&lt;/strong&gt; - Indicates whether editing is enabled.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;IsPanningEnabled&lt;/strong&gt; – Indicates whether panning is enabled.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;IsZoomEnabled&lt;/strong&gt; - Indicates whether zooming is enabled.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;IsResizingEnabled&lt;/strong&gt; - Indicates whether shape resizing is enabled.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;IsRotationEnabled&lt;/strong&gt; - Indicates whether shape rotation is enabled.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;IsDraggingEnabled&lt;/strong&gt; - Indicates whether shape dragging is enabled.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;IsConnectorsManipulationEnabled&lt;/strong&gt; - Indicates whether connection creating is enabled through the connectors.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;AllowDelete&lt;/strong&gt; – Indicates whether item deletion is enabled.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;AllowDrop&lt;/strong&gt; – Indicates whether the diagram can accept drop.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;AllowCopy&lt;/strong&gt; – Indicates whether item copying is enabled.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;AllowPaste&lt;/strong&gt; – Indicates whether item pasting is enabled.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;SelectionMode&lt;/strong&gt; – Can choose the selection mode through enumeration:
    &lt;ul&gt; &lt;li&gt;None – selection is disabled.&lt;/li&gt; &lt;li&gt;Single – only one can be selection either with Rectangle selection tool or pressing CTRL key.&lt;/li&gt; &lt;li&gt;Multiple – selecting items on each click and with Rectangle selection tool.&lt;/li&gt; &lt;li&gt;Extended – selecting items with CTRL or using Rectangle selection tool.&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;h1&gt;To conclude&lt;/h1&gt; &lt;table border="0" cellspacing="0" cellpadding="0" style="border: none;  margin-left: 11.35pt; border-collapse: collapse; border-image: initial;"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top"&gt; &lt;img alt="Much more to discover" title="Much more to discover" src="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/pic8.sflb?decreaseOnly=true" /&gt; &lt;/td&gt; &lt;/tr&gt; &lt;tr&gt; &lt;td valign="top"&gt; &lt;p&gt;&lt;em&gt;[Picture above] Please visit&lt;a title="RadDiagram documentation" target="_blank" href="http://www.telerik.com/help/wpf/raddiagram-overview.html"&gt; the documentation on RadDiagram&lt;/a&gt; for much more info on other aspects not touched by this overview article.&lt;/em&gt;&lt;/p&gt; &lt;/td&gt; &lt;/tr&gt; &lt;/tbody&gt; &lt;/table&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;While this demo application shows off some of the more juicy features of RadDiagram it is by no means the end of the story. You are invited to continue reading on:&lt;/p&gt; &lt;ul&gt; &lt;li&gt; &lt;a href="http://www.telerik.com/help/silverlight/raddiagram-overview.html" title="RadDiagram for Silverlight" target="_blank"&gt;RadDiagram for Silverlight&lt;/a&gt; and the many additional possibilities Silverlight offers to display rich diagrams in the browser&lt;/li&gt; &lt;li&gt;The
    &lt;a href="http://www.telerik.com/help/wpf/raddiagram-data-databinding.html" title="RadDiagram and databinding features" target="_blank"&gt;MVVM mechanism for RadDiagram
    &lt;/a&gt; &lt;/li&gt; &lt;li&gt;The
    &lt;a href="http://www.telerik.com/help/wpf/raddiagrams-features-clipboard.html" title="RadDiagram and te clipboard" target="_blank"&gt;inter-operability of the clipboard between RadDiagram for Silverlight and WPF&lt;/a&gt;&lt;/li&gt; &lt;li&gt;The
    &lt;a href="http://www.telerik.com/help/silverlight/raddiagrams-features-serialization.html" title="RadDiagram and serialization" target="_blank"&gt;shared WPF and Silverlight document format&lt;/a&gt;, which allows you to exchange diagrams between the two technologies.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;p&gt;&lt;img alt="" style="border-width: 0px;border-style: solid;" usemap="#rade_img_map_1329429719090" src="http://blogs.telerik.com/Libraries/Silverlight_team/CTA_XAML_banner.sflb" /&gt; &lt;map name="rade_img_map_1329429719090" id="rade_img_map_1329429719090"&gt; &lt;area href="http://www.telerik.com/account/free-trials/trial-product-versions/single-trial.aspx?pmvid=0&amp;amp;pid=601" coords="205,59,572,102" shape="RECT" /&gt; &lt;area coords="509,99,510,101" shape="RECT" /&gt; &lt;area href="http://www.telerik.com/account/free-trials/trial-product-versions/single-trial.aspx?pmvid=0&amp;amp;pid=571" coords="39,108,597,151" shape="RECT" /&gt;&lt;/map&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MiroMiroslavovsBlog/~4/GyHQClyNi7s" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/MiroMiroslavovsBlog/~3/GyHQClyNi7s/a-financial-dashboard-designer-based-on-raddiagram.aspx</link>
      <author>Miro Miroslavov</author>
      <comments>http://blogs.telerik.com/MiroMiroslavov/Posts/12-03-07/a-financial-dashboard-designer-based-on-raddiagram.aspx</comments>
      <guid isPermaLink="false">39b3b3fd-faf3-472e-918a-bfcf027a474e</guid>
      <pubDate>Wed, 07 Mar 2012 12:01:00 GMT</pubDate>
    <feedburner:origLink>http://blogs.telerik.com/MiroMiroslavov/Posts/12-03-07/a-financial-dashboard-designer-based-on-raddiagram.aspx</feedburner:origLink></item>
    <item>
      <title>RadDiagram Architecture</title>
      <description>&lt;p&gt;&lt;a href="http://blogs.telerik.com/blogs/posts/12-02-16/telerik-xaml-controls-q1-2012-are-here.aspx"&gt;&lt;/a&gt;&lt;a href="http://blogs.telerik.com/blogs/posts/12-02-16/telerik-xaml-controls-q1-2012-are-here.aspx"&gt;Telerik Q1.2012 XAML Controls are here!&lt;/a&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;And one of the most interesting new pieces there is the &lt;a href="http://demos.telerik.com/silverlight/#Diagrams/DesignToolbox"&gt;Diagramming control/framework&lt;/a&gt;. It is a product of joint venture between Telerik and our awesome partner - &lt;a href="http://visualizationtools.net/default/"&gt;Orbifold&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;RadDiagram brings lots of new and exiting&amp;nbsp;possibilities&amp;nbsp;to both WPF and Silverlight worlds. In this post I'll show off what RadDiagram is and how you can best use it for number of different applications. Let's first take a look and &lt;a href="http://demos.telerik.com/silverlight/#Diagrams/FirstLook"&gt;play with it&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;img alt="" src="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/diagram_2.sflb?decreaseOnly=true" /&gt;&lt;/p&gt; &lt;h1&gt;Control or a Framework?&lt;/h1&gt; &lt;h2&gt;The Control.&lt;/h2&gt; &lt;p&gt;&lt;strong&gt;RadDiagram &lt;/strong&gt;is very extensible and flexible &lt;strong&gt;Control&lt;/strong&gt; (part of the&amp;nbsp;Telerik.Windows.Controls.Diagrams assembly). It mimics the intrinsic ItemsControl and has two major types of children:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;RadDiagramShape&lt;/strong&gt; - an object that describes the nodes of the diagram. You can configure its form
    using the &lt;strong&gt;Geometry&lt;/strong&gt; property as it allows you to define a custom geometry. But note that it is also a &lt;strong&gt;ContentControl&lt;/strong&gt;, meaning that you can add any content to it - TreeView, GridView or any other XAML control you are accustomed to.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;RadDiagramConnection &lt;/strong&gt;-&amp;nbsp;an object that connects zero, one or two shapes. It provides lots of properties to further customize it and extend it.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;RadDiagram also brings you all the XAML goodies you are used to plus much more features you'd love. Let me just name a few:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Binding to list of objects and &lt;strong&gt;MVVM &lt;/strong&gt;support&lt;/li&gt; &lt;li&gt;Easy declarative composition model - create beautiful diagrams with just few lines of XAML&lt;/li&gt; &lt;li&gt;UI &lt;strong&gt;Virtualization&lt;/strong&gt;&amp;nbsp;&lt;/li&gt; &lt;li&gt;Built-in Shape and Connection's&amp;nbsp;&lt;strong&gt;Manipulations and Editing&lt;/strong&gt;&lt;/li&gt; &lt;li&gt;Plenty of &lt;strong&gt;RoutedCommands &lt;/strong&gt;to ease you hook to ready functionality. Also built in keyboard support&lt;/li&gt; &lt;li&gt;Plenty of &lt;strong&gt;RoutedEvents &lt;/strong&gt;that you can hook to and handle&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Serialization &lt;/strong&gt;- one of my favourite features - you can copy/paste diagram items between Silverlight and WPF applications. You can also save and load entire diagram&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Clipboard &lt;/strong&gt;operations - Copy, Cut, Paste and Delete&lt;/li&gt; &lt;li&gt;Built in &lt;strong&gt;Undo-Redo&lt;/strong&gt; framework that works for all and every operation, but also gives you extensible API to hook up and add your functionality to the stack&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Pan &lt;/strong&gt;and &lt;strong&gt;Zoom&lt;/strong&gt;&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Align &lt;/strong&gt;and &lt;strong&gt;Snap &lt;/strong&gt;to grid shapes&lt;/li&gt; &lt;li&gt;Different types of &lt;strong&gt;selection &lt;/strong&gt;modes&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Read-only&lt;/strong&gt; diagram - there are plenty of properties you can modify to suits your needs&lt;/li&gt; &lt;/ul&gt; &lt;h2&gt;The Framework.&lt;/h2&gt; &lt;p&gt;But behind all that XAML goodies, there is a rich&amp;nbsp;&lt;strong&gt;Diagramming&lt;/strong&gt;&amp;nbsp;&lt;strong&gt;Framework&amp;nbsp;&lt;/strong&gt;(Telerik.Windows.Diagrams.Core)&amp;nbsp;that deals with the core objects and functionality - I call that &lt;strong&gt;Graph Object Model&lt;/strong&gt; (GOM). This framework is platform independent and can be easily reused across other .Net technologies. The tricky part here is that the core framework and services depends only on bunch of interfaces and not on the real classes. This gives us a good chance to reuse the core in multiple platforms.&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;&lt;a href="http://en.wikipedia.org/wiki/Graph_(mathematics)"&gt;Graph &lt;/a&gt;&lt;/strong&gt;- The structure that contains the nodes and the connections of the Diagram&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Node&amp;nbsp;&lt;/strong&gt;(shape, &lt;a href="http://en.wikipedia.org/wiki/Vertex_(graph_theory)"&gt;vertex&lt;/a&gt;) - Object in a graph&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Link&amp;nbsp;&lt;/strong&gt;(connection, edge) - Object that is part of the graph and connects zero, one or two nodes&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Connector&amp;nbsp;&lt;/strong&gt;- Defines a point of a Shape that you can connect a connection to it. Usually a node has four built-in connectors&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Graph analysis&lt;/strong&gt; - A set of functionality that helps you find &lt;a href="http://en.wikipedia.org/wiki/Spanning_tree"&gt;Spanning trees&lt;/a&gt;, find &lt;a href="http://en.wikipedia.org/wiki/Shortest_path_problem"&gt;shortest graph paths&lt;/a&gt; and many other interesting stuff and algorithms.&lt;/li&gt; &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Graph_drawing#Layout_methods" style="font-weight: bold;"&gt;Layout &lt;/a&gt;and &lt;strong&gt;Routing&lt;/strong&gt;&amp;nbsp;algorithms - A set of algorithms that describes how the nodes and connections should be layout&lt;/li&gt; &lt;/ul&gt; &lt;h2&gt;The Applications.&lt;/h2&gt; &lt;p&gt;There are hundreds of different diagrams and&amp;nbsp;thousands&amp;nbsp;of different types of diagramming applications. There are tons of features that can be added to a diagram control, but they are not the same for each and every type of diagram. That is why we tried to add only the most common and reusable features to the RadDiagram and leave a lot of places for&amp;nbsp;extensibility. RadDiagram&amp;nbsp;is just your starting point, but then you'll have to add some custom (business) logic and rules, custom layout algorithms and custom types of shapes and connections. For example our four major samples in the &lt;a href="http://demos.telerik.com/silverlight/"&gt;public demos site&lt;/a&gt;&amp;nbsp;have also some custom, in place logic that is different.&amp;nbsp;&lt;/p&gt; &lt;h2&gt;The Class Diagram.&lt;/h2&gt; &lt;p&gt;You can take a look at the beautiful &lt;a href="http://demos.telerik.com/silverlight/#Diagrams/ClassDiagram"&gt;Class Diagram example&lt;/a&gt; that shows the entire RadDiagram class structure.&lt;/p&gt; &lt;p&gt;&lt;img src="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/class_diagram.sflb?decreaseOnly=true" alt="Class Diagram" /&gt;&lt;/p&gt; &lt;p&gt;This is just the beginning of a series of posts regarding RadDiagram, so you'd better stay tuned. Your feedback and comments are more than welcome.&lt;/p&gt; &lt;p&gt;&lt;br /&gt; &lt;/p&gt; &lt;img alt="" style="border-width: 0px;border-style: solid;" usemap="#rade_img_map_1329429719090" src="http://blogs.telerik.com/Libraries/Silverlight_team/CTA_XAML_banner.sflb" /&gt; &lt;map name="rade_img_map_1329429719090" id="rade_img_map_1329429719090"&gt; &lt;area href="http://www.telerik.com/account/free-trials/trial-product-versions/single-trial.aspx?pmvid=0&amp;amp;pid=601" coords="205,59,572,102" shape="RECT" /&gt; &lt;area coords="509,99,510,101" shape="RECT" /&gt; &lt;area href="http://www.telerik.com/account/free-trials/trial-product-versions/single-trial.aspx?pmvid=0&amp;amp;pid=571" coords="39,108,597,151" shape="RECT" /&gt;&lt;/map&gt;&lt;img src="http://feeds.feedburner.com/~r/MiroMiroslavovsBlog/~4/qE_akg20eYg" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/MiroMiroslavovsBlog/~3/qE_akg20eYg/raddiagram-architecture.aspx</link>
      <author>Miro Miroslavov</author>
      <comments>http://blogs.telerik.com/MiroMiroslavov/Posts/12-02-21/raddiagram-architecture.aspx</comments>
      <guid isPermaLink="false">dcffb9dc-3af3-46bd-9332-96362d615c54</guid>
      <pubDate>Tue, 21 Feb 2012 12:00:00 GMT</pubDate>
    <feedburner:origLink>http://blogs.telerik.com/MiroMiroslavov/Posts/12-02-21/raddiagram-architecture.aspx</feedburner:origLink></item>
    <item>
      <title>Volume Mixer with the new shiny RadSlider for Silverlight and WPF</title>
      <description>&lt;p&gt;As you may already know, we are working hard to&amp;nbsp;improve the RadSlider in a broad way. We've fixed a lot of issues, but also added a lot of new cool features. Now it's so easy to customize and bind (in MVVM-ish way), that I've created this Windows 7 "Mixer" like example in less than an hour. I didn't change the Slider's ControlTemplate and don't have a single line of code behind.&lt;/p&gt; &lt;p&gt;(Please note that the&amp;nbsp;new slider will be available with the&amp;nbsp;&lt;strong&gt;beta of Q2.2011&lt;/strong&gt;).&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/MasterSlider_code.sflb"&gt;Download and play with the new bits&lt;/a&gt;.&lt;/p&gt; &lt;p style="border: 1px  solid;"&gt;&lt;object width="100%" height="400" data="data:application/x-silverlight-2," type="application/x-silverlight-2"&gt; &lt;param name="source" value="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/MasterSlider_example.sflb"&gt; &lt;param name="onError" value="onSilverlightError"&gt; &lt;param name="background" value="white"&gt; &lt;param name="minRuntimeVersion" value="4.0.50826.0"&gt; &lt;param name="autoUpgrade" value="true"&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;amp;v=4.0.50826.0" style="text-decoration: none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style: none;"&gt; &lt;/a&gt; &lt;/object&gt;&lt;iframe id="_sl_historyFrame" style="border: 0px;  width: 0px; height: 0px; visibility: hidden;"&gt;&lt;/iframe&gt;&lt;/p&gt; &lt;div&gt;&lt;/div&gt; &lt;em&gt;Just play with the Sliders - note that the most left one is the Master that can "control in a way" the others.&lt;/em&gt; &lt;h1&gt;Styling&lt;/h1&gt; &lt;p&gt;Silverlight controls are all about styling. They MUST be easy to style and easy to customize. That's why we've changed the old slider's style with new one, that is much easier to customize (due to the less code used). But also we've added a bunch of new Style type properties that will allow you to customize it without the need of changing the ControlTemplate.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;ThumbStyle &lt;/strong&gt;- this will allow you to change the look of the little Thumb that you drag.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;TrackStyle &lt;/strong&gt;- this will allow you to change the thick line behind the Thumb.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;TickBarStyle&lt;/strong&gt;&amp;nbsp;- the Style used for the bar standing behind the ticks.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;HandleStyle - &lt;/strong&gt;you may change the look of the Repeat Buttons at the both ends of the Slider (in case you use them).&lt;/li&gt; &lt;li&gt;&lt;strong&gt;TickTemplate -&lt;/strong&gt;&amp;nbsp;of course you can change the ticks&amp;nbsp;template.&lt;/li&gt; &lt;li&gt;And much more&lt;/li&gt; &lt;/ul&gt; &lt;h1&gt;MVVM&lt;/h1&gt; &lt;p&gt;MVVM is other Most important thing when we're talking about Silverlight. Each and every property must be "&lt;strong&gt;bindable&lt;/strong&gt;". Here is how I've bound the Slider to the ViewModel properties.&lt;/p&gt; &lt;h3&gt;The View&lt;/h3&gt; &lt;p&gt;I have one Master slider on the left and ItemsControl populated with Sliders on the right. They both are bound to ViewModel properties.&lt;/p&gt; &lt;div class="reCodeBlock" style="border: 1px  solid  #7f9db9;overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerik:GroupBox&lt;/code&gt; &lt;code style="color: #808080;"&gt;Header&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Devices"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Style&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{StaticResource BorderStyle}"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;ContentControl&lt;/code&gt; &lt;code style="color: #808080;"&gt;ContentTemplate&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{StaticResource SliderTemplate}"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Content&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{Binding MasterSlider}"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerik:GroupBox&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerik:GroupBox&lt;/code&gt; &lt;code style="color: #808080;"&gt;Header&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Applications"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Style&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{StaticResource BorderStyle}"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Grid.Column&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"1"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;ItemsControl&lt;/code&gt; &lt;code style="color: #808080;"&gt;ItemsSource&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{Binding Sliders}"&lt;/code&gt; &lt;code style="color: #808080;"&gt;ItemTemplate&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{StaticResource SliderTemplate}"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;ItemsControl.ItemsPanel&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&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;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;ItemsPanelTemplate&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&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;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;StackPanel&lt;/code&gt; &lt;code style="color: #808080;"&gt;Orientation&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Horizontal"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&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;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;ItemsPanelTemplate&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;ItemsControl.ItemsPanel&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;ItemsControl&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerik:GroupBox&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;pre&gt;Placing the visuals.&lt;/pre&gt; &lt;div class="reCodeBlock" style="border: 1px  solid  #7f9db9;overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Style&lt;/code&gt; &lt;code style="color: #808080;"&gt;TargetType&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"telerik:RadSlider"&lt;/code&gt; &lt;code style="color: #808080;"&gt;x:Key&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"sliderStyle"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Setter&lt;/code&gt; &lt;code style="color: #808080;"&gt;Property&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"HorizontalAlignment"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Value&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Center"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Setter&lt;/code&gt; &lt;code style="color: #808080;"&gt;Property&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"VerticalAlignment"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Value&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Bottom"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Setter&lt;/code&gt; &lt;code style="color: #808080;"&gt;Property&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"TickFrequency"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Value&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"50"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Setter&lt;/code&gt; &lt;code style="color: #808080;"&gt;Property&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Minimum"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Value&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"0"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Setter&lt;/code&gt; &lt;code style="color: #808080;"&gt;Property&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Maximum"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Value&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"100"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Setter&lt;/code&gt; &lt;code style="color: #808080;"&gt;Property&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"EnableSideTicks"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Value&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"True"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Setter&lt;/code&gt; &lt;code style="color: #808080;"&gt;Property&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"TickPlacement"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Value&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"BottomRight"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Setter&lt;/code&gt; &lt;code style="color: #808080;"&gt;Property&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Orientation"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Value&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Vertical"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Setter&lt;/code&gt; &lt;code style="color: #808080;"&gt;Property&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"TickBarStyle"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Value&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{StaticResource TickBarStyle}"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Setter&lt;/code&gt; &lt;code style="color: #808080;"&gt;Property&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"TrackStyle"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Value&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{StaticResource TrackStyle}"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Setter&lt;/code&gt; &lt;code style="color: #808080;"&gt;Property&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"ThumbStyle"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Value&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{StaticResource ThumbStyle}"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Setter&lt;/code&gt; &lt;code style="color: #808080;"&gt;Property&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"TickTemplate"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Setter.Value&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&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;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;DataTemplate&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&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;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Rectangle&lt;/code&gt; &lt;code style="color: #808080;"&gt;Width&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"1"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Height&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"20"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Fill&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Gray"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&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;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;DataTemplate&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Setter.Value&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Setter&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Style&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;pre&gt;Styling the Slider...&lt;/pre&gt; &lt;div class="reCodeBlock" style="border: 1px  solid  #7f9db9;overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;DataTemplate&lt;/code&gt; &lt;code style="color: #808080;"&gt;x:Key&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"SliderTemplate"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Border&lt;/code&gt; &lt;code style="color: #808080;"&gt;Margin&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"10 0"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Padding&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"20 0"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Grid&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&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;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Grid.RowDefinitions&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&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;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;RowDefinition&lt;/code&gt; &lt;code style="color: #808080;"&gt;Height&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Auto"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&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;&lt;/code&gt;&lt;span style="margin-left: 48px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;RowDefinition&lt;/code&gt; &lt;code style="color: #808080;"&gt;Height&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"*"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&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;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Grid.RowDefinitions&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&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;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;TextBlock&lt;/code&gt; &lt;code style="color: #808080;"&gt;Text&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{Binding Title}"&lt;/code&gt;&amp;nbsp; &lt;code style="color: #808080;"&gt;Margin&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"0 10"&lt;/code&gt;&lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&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;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerik:RadSlider&lt;/code&gt; &lt;code style="color: #808080;"&gt;Grid.Row&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"1"&lt;/code&gt; &lt;code style="color: #808080;"&gt;Style&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{StaticResource sliderStyle}"&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&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;&lt;/code&gt;&lt;span style="margin-left: 60px !important;"&gt;&lt;code style="color: #808080;"&gt;Value&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"{Binding Value, Mode=TwoWay}"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Grid&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Border&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;DataTemplate&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;pre&gt;And the slider template...&lt;/pre&gt; &lt;h3&gt;The ViewModel&lt;/h3&gt; &lt;div&gt;In this nice demo I'm using two &lt;strong&gt;ViewModels&lt;/strong&gt;&amp;nbsp;that are doing&amp;nbsp;the actual calculations and control the Sliders. The first one is only representing a single Slider with it's Value and Title property. The second ViewModel is doing the actual calculations, when a Value of some slider has changed.&lt;/div&gt; &lt;div&gt; &lt;div class="reCodeBlock" style="border: 1px  solid  #7f9db9;overflow-y: auto;"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;void&lt;/code&gt; &lt;code style="color: #000000;"&gt;slider_ValueChanged(&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;object&lt;/code&gt; &lt;code style="color: #000000;"&gt;sender, ValueChangedEventArgs e)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;this&lt;/code&gt;&lt;code style="color: #000000;"&gt;.minorChanging = &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;true&lt;/code&gt;&lt;code style="color: #000000;"&gt;;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;this&lt;/code&gt;&lt;code style="color: #000000;"&gt;.masterSlider.Value = Math.Max(&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;this&lt;/code&gt;&lt;code style="color: #000000;"&gt;.masterSlider.Value, ((SliderViewModel)sender).Value);&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;this&lt;/code&gt;&lt;code style="color: #000000;"&gt;.minorChanging = &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;false&lt;/code&gt;&lt;code style="color: #000000;"&gt;;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;void&lt;/code&gt; &lt;code style="color: #000000;"&gt;masterSlider_ValueChanged(&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;object&lt;/code&gt; &lt;code style="color: #000000;"&gt;sender, ValueChangedEventArgs e)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;var delta = e.New - e.Old;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;this&lt;/code&gt;&lt;code style="color: #000000;"&gt;.masterSlider.Value = e.New;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;if&lt;/code&gt; &lt;code style="color: #000000;"&gt;(!minorChanging)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;foreach&lt;/code&gt; &lt;code style="color: #000000;"&gt;(var slider &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;in&lt;/code&gt; &lt;code style="color: #000000;"&gt;sliders)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&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;&lt;/code&gt;&lt;span style="margin-left: 36px !important;"&gt;&lt;code style="color: #000000;"&gt;slider.Value += delta;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px !important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt; &lt;h1&gt;Share your feedback&lt;/h1&gt; &lt;p&gt;Please let me know what do you think about the new version of the RadSlider. Also note that this is preview version and may have some issues in it.&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/MasterSlider_code.sflb"&gt;Download and play with the new bits&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MiroMiroslavovsBlog/~4/h7Ah0iSJu00" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/MiroMiroslavovsBlog/~3/h7Ah0iSJu00/volume-mixer-with-the-new-shiny-radslider-for-silverlight-and-wpf.aspx</link>
      <author>Miro Miroslavov</author>
      <comments>http://blogs.telerik.com/MiroMiroslavov/Posts/11-04-15/volume-mixer-with-the-new-shiny-radslider-for-silverlight-and-wpf.aspx</comments>
      <guid isPermaLink="false">32bdb868-b7e8-4cbe-9fd7-0d51f572dbfe</guid>
      <pubDate>Fri, 15 Apr 2011 12:34:00 GMT</pubDate>
    <feedburner:origLink>http://blogs.telerik.com/MiroMiroslavov/Posts/11-04-15/volume-mixer-with-the-new-shiny-radslider-for-silverlight-and-wpf.aspx</feedburner:origLink></item>
    <item>
      <title>Virtualized TileView for Silverlight and WPF, different sizes, automatic scrolling and much more.</title>
      <description>&lt;p&gt;With the &lt;strong&gt;Q1 2011&lt;/strong&gt; release just being around the corner a new and amazing version of RadTileView will be available. It is sleek, fast and more responsive than ever and it brings a whole set of new features and functionality to the table.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/TileViewVirtualization.sflb"&gt;Download and play with the new bits&lt;/a&gt;.&lt;/p&gt; &lt;p style="border: 1px solid;"&gt;&lt;object width="100%" height="500" data="data:application/x-silverlight-2," type="application/x-silverlight-2"&gt; &lt;param name="source" value="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/TileViewVirtualization_example.sflb"/&gt; &lt;param name="onError" value="onSilverlightError"/&gt; &lt;param name="background" value="white"/&gt; &lt;param name="minRuntimeVersion" value="4.0.50826.0"/&gt; &lt;param name="autoUpgrade" value="true"/&gt; &lt;a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;amp;v=4.0.50826.0" style="text-decoration: none;"&gt; &lt;img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style: none;"&gt; &lt;/a&gt; &lt;/object&gt;&lt;iframe id="_sl_historyFrame" style="width: 0px; height: 0px; visibility: hidden;border: 0px;"&gt;&lt;/iframe&gt;&lt;/p&gt; &lt;div&gt;&lt;/div&gt; &lt;h1&gt;Virtualization&lt;/h1&gt; &lt;p&gt;The main feature, that I’m sure you’d like most is the &lt;strong&gt;UI Virtualization&lt;/strong&gt; (delaying the creation of UI Elements). We implemented it in both tiling scenarios:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Restored&lt;/strong&gt; – this includes both directions - &lt;strong&gt;Horizontal&lt;/strong&gt; and &lt;strong&gt;Vertical&lt;/strong&gt;. It means that if you have 10 columns x 1000 rows you'll get 10 000 tiles and you’ll see both scrollbars. However, the realized tiles will be just these which are visible and while scrolling new tiles will be realized and showed on the fly. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Maximized | Minimized&lt;/strong&gt; – when you maximize a tile, the rest become &lt;strong&gt;Minimized&lt;/strong&gt;. At this point the necessary scrollbar will be shown and only the visible minimized tiles will be created (realized). At the end you’ll have just few tiles&amp;nbsp;created even though the TileView has thousands of items. This feature is available for every minimized items dock position - Left, Right, Bottom and Top. &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;This new feature will enable tons of new scenarios where great UX and incredible performance and mandatory.&lt;/p&gt; &lt;h1&gt;Different Sizes&lt;/h1&gt; &lt;p&gt;The new TileView comes with a bunch of&amp;nbsp;new ways to set various sizes to the tiles. You can quickly start with the following RadTileView properties:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;RowHeight&lt;/strong&gt; – defines the height of the restored tiles. Note that it's of type GridLength:
    &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Absolute&lt;/strong&gt; sizing – sets exact height to the restored tiles. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Star&lt;/strong&gt; sizing (*) – the available height will be distributed equally among the&amp;nbsp;restored tiles (just like a Grid panel). &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Auto&lt;/strong&gt; sizing – each&amp;nbsp;restored tile will take as much as it needs. This will allow scenarios where the tiles may have different height. &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;&lt;strong&gt;ColumnWidth&lt;/strong&gt; - defines the width of the restored tiles. Note that it's of type GridLength:
    &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Absolute&lt;/strong&gt; sizing – sets exact width to the&amp;nbsp;restored tiles. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Star&lt;/strong&gt; sizing (*) – the available width will be distributed equally among the&amp;nbsp;restored tiles (just like a Grid panel). &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Auto&lt;/strong&gt; sizing – each&amp;nbsp;restored tile will take as much as it needs. This will allow scenarios where the tiles may have different width. &lt;radeditorformatted_1 /&gt;&lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;&lt;strong&gt;RowsCount&lt;/strong&gt; – specifies how many rows you need. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;ColumnsCount&lt;/strong&gt; – specifies how many columns you need. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;MinimizedRowHeight&lt;/strong&gt; – defines the height of the minimized tiles. It is of type GridLength.
    &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Absolute&lt;/strong&gt; sizing – sets exact height to the minimized tiles. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Auto&lt;/strong&gt; sizing – each minimized tile will take as much as it needs. This will allow scenarios where the minimized tiles may have different height. &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;&lt;strong&gt;MinimizedColumnWidth&lt;/strong&gt; – define the width of the minimized tiles. (GridLength)
    &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Absolute&lt;/strong&gt; sizing – sets exact width to the minimized tiles. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Auto&lt;/strong&gt; sizing – each minimized tile will take as much as it needs. This will allow scenarios where the minimized tiles may have different width. &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Please note that each RadTileViewItem also allows you to specify sizes on per tile base.&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;RestoredHeight(Width)&lt;/strong&gt; – specify the size of the tile in restored state. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;MinimizedHeight(Width)&lt;/strong&gt; – specify the size of the tile in minimized state. &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;Combining all these properties allows you to use TileView in a lot of new scenarios and types of applications.&lt;/p&gt; &lt;h1&gt;Automatic Scrolling&lt;/h1&gt; &lt;p&gt;Lets imagine we have a TileView with 100 000 restored tiles (10 x 10 000) and both scrollbars are visible. In this scenario we need a way to automatically scroll the tile while Dragging – the way we do it in Windows Explorer when dragging a file just near the end of the viewable area. You can enable the same functionality using a single property of RadTileView - &lt;strong&gt;IsAutoScrollingEnabled&lt;/strong&gt;. So to recap – &lt;strong&gt;drag an item near the end of the viewable area and stay there for a moment – the automatic scrolling will start immediately&lt;/strong&gt;. Also note that this will work in both directions - horizontal and vertical. &lt;/p&gt; &lt;h1&gt;What’s next&lt;/h1&gt; &lt;p&gt;These are just a few of the new features that will be available with the &lt;strong&gt;Q1 Beta&lt;/strong&gt; and later with the official release. Please stay tuned for upcoming posts, demos and examples showing the rest of the features.&lt;/p&gt; &lt;p&gt;What do you think about the new RadTileView? Please share your feedback.&lt;/p&gt; &lt;p&gt;But first &lt;a href="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/TileViewVirtualization.sflb"&gt;Download and play with the new bits&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MiroMiroslavovsBlog/~4/ly6kBb-qXZs" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/MiroMiroslavovsBlog/~3/ly6kBb-qXZs/virtualized-tileview-for-silverlight-and-wpf-different-sizes-automatic-scrolling-and-much-more.aspx</link>
      <author>Miro Miroslavov</author>
      <comments>http://blogs.telerik.com/MiroMiroslavov/Posts/11-02-10/virtualized-tileview-for-silverlight-and-wpf-different-sizes-automatic-scrolling-and-much-more.aspx</comments>
      <guid isPermaLink="false">fdbcb4c7-844c-4474-bae3-1b313e0f441a</guid>
      <pubDate>Thu, 10 Feb 2011 10:22:03 GMT</pubDate>
    <feedburner:origLink>http://blogs.telerik.com/MiroMiroslavov/Posts/11-02-10/virtualized-tileview-for-silverlight-and-wpf-different-sizes-automatic-scrolling-and-much-more.aspx</feedburner:origLink></item>
    <item>
      <title>Welcome to the new Telerik Minifier</title>
      <description>&lt;h1&gt;What's new in Telerik Minifier&lt;/h1&gt; &lt;p&gt;It is a huge pleasure to announce the release of Telerik’s new &lt;a href="http://minifier.telerik.com"&gt;Minifier&lt;/a&gt; tool now featuring Xap file minification option. It has been a while since we have released the &lt;a href="http://minifier.telerik.com/#/Assembly"&gt;Assembly Minifier&lt;/a&gt; and now we bring the concept for &lt;a href="http://blogs.telerik.com/miromiroslavov/posts/10-09-15/5_ways_to_reduce_your_xap_size.aspx"&gt;minification and reducing the XAP file&lt;/a&gt; size to a new level. We have just released the new &lt;a href="http://minifier.telerik.com"&gt;Telerik Minifier&lt;/a&gt; tool that now features &lt;strong&gt;Xap Minification &lt;/strong&gt;to enable you&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;prune and remove everything that your application does not need from the Telerik assemblies in the Xap. As a result, the size of your application's Xap file will be dramatically&amp;nbsp;reduced. Behind the scenes it uses the Assembly Minifier, to discover what should be removed and what not.&lt;/p&gt; &lt;h2&gt;Optimize your Xap file in just two steps&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;Go to &lt;a href="http://minifier.telerik.com/#/Xap"&gt;&lt;strong&gt;http://minifier.telerik.com/#/Xap&lt;/strong&gt;&lt;/a&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;and &lt;strong&gt;Upload&lt;/strong&gt; your Silverlight Application’s Xap file that uses &lt;strong&gt;Telerik assemblies&lt;/strong&gt;&lt;/li&gt; &lt;li&gt;Let the minifier discover what's redundant.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Download &lt;/strong&gt;the minified Xap file that will behave in the exact same way.&lt;/li&gt; &lt;/ul&gt; &lt;h2&gt;Features&lt;/h2&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Minification Information&lt;/strong&gt; – you can check the result of the minification process and see the actual size of the new Xap file compared to the size of the original one.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Details Information&lt;/strong&gt; – you can observe the actual Telerik controls that have been removed by clicking the “&lt;em&gt;&lt;strong&gt;View Details&lt;/strong&gt;&lt;/em&gt;” link. These are the controls that your application does not use, so they have been excluded from the original assemblies.&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlogLib/Windows-Live-Writer-5833cee73dd9_8DDA-MinifierDetails_2.sflb"&gt;&lt;img style="border: 0px;  background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px;" title="MinifierDetails" alt="MinifierDetails" src="http://blogs.telerik.com/Libraries/MetaBlogLib/Windows-Live-Writer-5833cee73dd9_8DDA-MinifierDetails_thumb.sflb" width="644" height="229" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;Restrictions&lt;/h2&gt; &lt;p&gt;Currently the Xap minification is not working well or may introduce some problems if used with more complex scenarios - Application that uses Prism, Assembly Library Caching or some reflection based Load on Demand. We will be working on implementing these features for the future releases.&lt;/p&gt; &lt;h1&gt;Windows Phone 7 support&lt;/h1&gt; &lt;p&gt;The new Minifier fully supports our newest and innovative&amp;nbsp;&lt;a href="http://www.telerik.com/products/windows-phone.aspx"&gt;RadControls for Windows Phone 7&lt;/a&gt; suite&lt;em&gt;, &lt;/em&gt;which means that you can use the Telerik assemblies for WP7 and extract only the controls (classes) that you will need for your development. Or, the other way around, you can simply optimize the compiled Xap file of your Windows Phone application. We know that when it comes to mobile application, the &lt;strong&gt;download time&lt;/strong&gt;, &lt;strong&gt;the generated internet traffic&lt;/strong&gt; and the overall performance of the application really matter. Therefore, we extended our minification tool to also support RadControls for Windows Phone 7. Please read my blog post on &lt;a href="http://blogs.telerik.com/miromiroslavov/posts/10-06-10/telerik_assembly_minifier.aspx"&gt;how to use the Assembly Minifier&lt;/a&gt; for more information.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlogLib/Windows-Live-Writer-5833cee73dd9_8DDA-MinifyWP7_4.sflb"&gt;&lt;img style="border: 0px;  background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px;" title="MinifyWP7" alt="MinifyWP7" src="http://blogs.telerik.com/Libraries/MetaBlogLib/Windows-Live-Writer-5833cee73dd9_8DDA-MinifyWP7_thumb_1.sflb" width="644" height="384" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;h1&gt;New Design and Theme&lt;/h1&gt; &lt;p&gt;The new Minifier comes also with great new Design. You can enjoy our new &lt;strong&gt;Expression Dark&lt;/strong&gt; theme as well as some new navigation features. Both the &lt;strong&gt;Assembly Minifier&lt;/strong&gt; and the &lt;strong&gt;Xap Minifier&lt;/strong&gt; are available at&lt;a href=" http://minifier.telerik.com"&gt; http://minifier.telerik.com&lt;/a&gt;.&lt;/p&gt; &lt;h3&gt;Home Page&lt;/h3&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlogLib/Windows-Live-Writer-5833cee73dd9_8DDA-XapMinifier_2.sflb"&gt;&lt;img style="border: 0px;  background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px;" title="XapMinifier" alt="XapMinifier" src="http://blogs.telerik.com/Libraries/MetaBlogLib/Windows-Live-Writer-5833cee73dd9_8DDA-XapMinifier_thumb.sflb" width="644" height="422" /&gt;&lt;/a&gt;&lt;/p&gt; &lt;h1&gt;Conclusion&lt;/h1&gt; &lt;p&gt;I am looking forward to see your comments and feedback on the new Telerik Minifier tool, the Xap minification and the support for our controls for Windows Phone 7. We highly value your feedback as we know that this is always the best way to keep our products getting better.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MiroMiroslavovsBlog/~4/2gB6Ce-T2vw" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/MiroMiroslavovsBlog/~3/2gB6Ce-T2vw/welcome-to-the-new-telerik-minifier.aspx</link>
      <author>Miro Miroslavov</author>
      <comments>http://blogs.telerik.com/MiroMiroslavov/Posts/10-11-22/welcome-to-the-new-telerik-minifier.aspx</comments>
      <guid isPermaLink="false">9256a682-75c2-416a-8967-ec94b7881431</guid>
      <pubDate>Mon, 22 Nov 2010 15:10:00 GMT</pubDate>
    <feedburner:origLink>http://blogs.telerik.com/MiroMiroslavov/Posts/10-11-22/welcome-to-the-new-telerik-minifier.aspx</feedburner:origLink></item>
    <item>
      <title>The World of Model&amp;ndash;View&amp;ndash;ViewModel - through my eyes.</title>
      <description>&lt;h1&gt;The Big UI Problem&lt;/h1&gt; &lt;p&gt;Since the User Interface came on the scene of software development, it is constantly one of the biggest problems. It is really hard to &lt;strong&gt;design the architecture&lt;/strong&gt; of the User Interfaces, User Interactions and deal with all the logic around, all the different states and behaviors. It is not an easy task also to &lt;strong&gt;separate&lt;/strong&gt; the UI logic from the other layers of the architecture. On the other hand, even if you develop the whole application, you should start to think about how to automatically &lt;strong&gt;test the UI&lt;/strong&gt; (unit tests, components tests, integration tests…), how to &lt;strong&gt;maintain it&lt;/strong&gt; in a way that will reduce the regression, will easily let you add new functionality and the very important one – the new team members should be able easily get the idea or say it – &lt;strong&gt;readability&lt;/strong&gt;. &lt;/p&gt; &lt;h1&gt;The &lt;em&gt;No-No &lt;/em&gt;Approach&lt;/h1&gt; &lt;ul&gt; &lt;li&gt;Get some data from the Database &lt;/li&gt; &lt;li&gt;Create some visual controls to show this Data &lt;/li&gt; &lt;li&gt;Add some visual logic &lt;/li&gt; &lt;li&gt;Add some domain specific (business) logic &lt;/li&gt; &lt;li&gt;Add some database logic &lt;/li&gt; &lt;li&gt;Tighten up everything with some more event handlers &lt;/li&gt; &lt;li&gt;Put all this in the ‘code-behind’ &lt;/li&gt; &lt;li&gt;Now you just messed up the things. &lt;/li&gt; &lt;li&gt;And enjoy this portion of &lt;strong&gt;Spaghetti&lt;/strong&gt; &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;img width="300" height="225" alt="Spaghetti" src="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/spaghetti.sflb?width=300&amp;amp;height=300&amp;amp;decreaseOnly=true"&gt;&lt;/img&gt;&lt;/p&gt; &lt;p&gt;The “&lt;strong&gt;Benefits&lt;/strong&gt;” of this approach&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Can Not test it.&lt;/strong&gt; &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Can Not maintain it.&lt;/strong&gt; &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Can Not read it. &lt;/strong&gt;(even if you write it) &lt;/li&gt; &lt;li&gt;It is &lt;strong&gt;Not the faster&lt;/strong&gt; approach. &lt;/li&gt; &lt;li&gt;And much more… &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;I don’t think this “approach” needs more to say about, so will leave it like this.&lt;/p&gt; &lt;h1&gt;UI Design Patterns - MVVM Predecessors&lt;/h1&gt; &lt;p&gt;Let me start with the father, but still the so good and famous - &lt;/p&gt; &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Model–View–Controller" target="_blank" shape="rect"&gt;&lt;strong&gt;Model – View – Controller.&lt;/strong&gt;&lt;/a&gt; It introduces 3 separate layers of abstraction. Where the &lt;strong&gt;Model&lt;/strong&gt; stands for the business (domain) object model that in most cases is similar to the Database model. The &lt;strong&gt;View&lt;/strong&gt; is the layer that will be shown to the end user. It is often passive, so leave the actual screen (visual) logic to be done by the &lt;strong&gt;Controller&lt;/strong&gt; – the mediator between the View and Model. This is the most famous UI Pattern across the web – used extensively in ASP.NET MVC, Ruby On Rails and much more.&lt;/p&gt; &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Model_View_Presenter" target="_blank" shape="rect"&gt;&lt;strong&gt;Model – View – Presenter&lt;/strong&gt;&lt;/a&gt; – Derivative of MVC, with some changes. The Controller is replaced with a Presenter abstraction, which stands for a guy that will hold an instance of a View and a Model and will do the visual logic by calling methods of the View. Most of the time the View is abstracted with an Interface, so leave the implementation of the Presenter fully separate and as a result the View can be easily replaced with new one.&lt;/p&gt; &lt;p&gt;&lt;a href="http://martinfowler.com/eaaDev/PresentationModel.html" target="_blank" shape="rect"&gt;&lt;strong&gt;Presentation Model&lt;/strong&gt;&lt;/a&gt; - by the father of the Enterprise design patterns &lt;a href="http://martinfowler.com/" target="_blank" shape="rect"&gt;Martin Fawler&lt;/a&gt;. Here the Presentaion model is holding the state of the UI and the data. The difference with the MVP is that the View is active, it gets the state out of the Presentation Model and is synchronizing it on every change. The Presentation model doesn’t know anything about the View.&lt;/p&gt; &lt;p&gt;Some years later this idea was modified slightly and fitted into the world of WPF with the name of:&lt;/p&gt; &lt;h1&gt;Model – View – ViewModel&lt;/h1&gt; &lt;p&gt;It was 2005, when this beautiful name was firstly mentioned by Josh Gossman in his blog post “&lt;strong&gt;&lt;a href="http://blogs.msdn.com/b/johngossman/archive/2005/10/08/478683.aspx" target="_blank" shape="rect"&gt;Introduction to Model/View/ViewModel pattern for building WPF apps&lt;/a&gt;&lt;/strong&gt;”. He described entirely the nature of the new UI pattern for building better WPF application. But four years later Josh Smith’s &lt;a href="http://msdn.microsoft.com/en-us/magazine/dd419663.aspx" target="_blank" shape="rect"&gt;article&lt;/a&gt; (&lt;strong&gt;WPF Apps With The Model-View-ViewModel Design Pattern&lt;/strong&gt;) in the msdn magazine really popularize the pattern and gave much more information about some of the not very well documented tricks. And that was the moment when MVVM became really popular and perfectly suited for building all types of WPF and Silverlight applications. Both WPF and Silverlight were evolving with MVVM in their blood, that’s why it so natural and well suited in their both worlds. &lt;/p&gt; &lt;h3&gt;The Model&lt;/h3&gt; &lt;p&gt;As every other UI pattern – it is mostly about ‘Showing and Reading Data’. The Model is the part that is concerned about the actual raw Data. It is those plain old CLR objects (POCOs) that represents each domain specific object and nothing more. Please note that these classes don’t have any business logic in them. This logic is separated in Services or Utilities alike objects. Example for Model classes are the well known Customers, Orders and so on.&lt;/p&gt; &lt;h3&gt;The View&lt;/h3&gt; &lt;p&gt;This is the part that usually gets really messed and we should pay special attention to it. In the world of MVVM: &lt;/p&gt; &lt;ul&gt; &lt;li&gt;It defines how the Data will be presented to the end user. The view usually uses the full power of WPF/Silverlight with the concepts of &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.datatemplate(VS.95).aspx" target="_blank" shape="rect"&gt;DataTemplates&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.style(VS.95).aspx" target="_blank" shape="rect"&gt;Styles&lt;/a&gt; to define how will be presented each piece of data. &lt;/li&gt; &lt;li&gt;Only plain XAML and nothing more. (&lt;strong&gt;Code-behindless&lt;/strong&gt;). &lt;/li&gt; &lt;li&gt;It is &lt;strong&gt;Stateless&lt;/strong&gt;. The state that is important to the application is kept by the ViewModels. &lt;/li&gt; &lt;li&gt;It is kind of &lt;strong&gt;Passive&lt;/strong&gt; – doesn’t have any specific logic in it – business or UI related. It’s activity is mainly due to the fact that it synchronizes it’s state with the ViewModels. More about these later. &lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;The ViewModel – “Model of a View”&lt;/h3&gt; &lt;p&gt;This is the guy that separates The View from The Model. (&lt;strong&gt;Presentation Separation&lt;/strong&gt;)&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Expose the model’s data via Properties&lt;/strong&gt;. Each piece of data should be exposed out of the ViewModel via Properties, so the View can get it from the ViewModel and visualize it on the screen. Very often is doing some presentation logic, formatting and making the model data more User friendly. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Keeps the state of the View in Properties&lt;/strong&gt;. Examples are IsSelected, IsExpanded and so on. These properties are always synchronized with the actual visual objects that are exposing this Selection and Expanding functionality. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Expose functionality to the View via &lt;/strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ff921126(PandP.20).aspx" target="_blank" shape="rect"&gt;&lt;strong&gt;Commands&lt;/strong&gt;&lt;/a&gt;. Commanding is the very important part of MVVM, because this is the way a Visual object can bind and execute method that exists in the ViewModel. At the end using Commands, a Button can execute Command (functionality) from the ViewModel when the user initiate an action (like Clicking it). The actual benefit of this is much easier Testability (in contrast with the eventing and event handling patterns) &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;img width="300" alt="MVVM" src="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/mvvm_diagram.sflb"&gt;&lt;/img&gt;&lt;/p&gt; &lt;h3&gt;The Glues&lt;/h3&gt; &lt;p&gt;Now lets see how these 3 layers are communicating between each other. &lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Data Binding&lt;/strong&gt; – is the built-in way of Synchronization between The View and The ViewModel. When two properties are bound and the one changes – the other gets changed as well. This technique is so powerful and natural to me that I can not even imagine writing software without it. Please &lt;a href="http://msdn.microsoft.com/en-us/library/cc278072(VS.95).aspx" target="_blank" shape="rect"&gt;read more about Data Binding&lt;/a&gt; at msdn.
    &lt;ul&gt; &lt;li&gt;&lt;strong&gt;INotifyPropertyChanged &lt;/strong&gt;– Once you implement this interface and raise appropriately its only PropertyChanged event each bound property will be notified about the change. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;INotifyCollectionChanged&lt;/strong&gt; – The same idea, but notifies Item’s controls for adding, removing or clearing operations over the bound ViewModel collection. There is built-in implementation in WPF/Silverlight called &lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms668604(VS.95).aspx" target="_blank" shape="rect"&gt;ObservableCollection&lt;/a&gt;&lt;/strong&gt;. &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Data Templates&lt;/strong&gt; – One of those things that really &lt;strong&gt;differentiate Silverlight/WPF&lt;/strong&gt; from the other platforms. It brings the concept of Data Driven Development to a new level, allowing us to define how we want to represent each piece of data using the declarative and so powerful XAML. So the Template is a declaration of the look of an object (Model, or the better – ViewModel). &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.datatemplate(VS.95).aspx" target="_blank" shape="rect"&gt;Read more&lt;/a&gt;. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Commands&lt;/strong&gt; – As we discussed, this is the way to expose functionality out of the ViewModel, so the View can bind to it and execute it when it has to, based on the user actions. In the world of MVVM, the implementation of the Commanding pattern uses the so called &lt;strong&gt;DelegateCommand (RelayCommand). &lt;/strong&gt;I really encourage you to read the full &lt;a href="http://msdn.microsoft.com/en-us/library/ff921126(PandP.20).aspx" target="_blank" shape="rect"&gt;article about commanding&lt;/a&gt;. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Messaging – &lt;/strong&gt;It’s optional concept that uses shared media to decouple ViewModels, but still make it possible to communicate between each-other. So the very basic scenario is one ViewModel sends message to the queue and a second ViewModel listens for that kind of messages and does an action. You may implement it in a very different ways, according to your needs. But keep in mind that most of the MVVM toolkits have it ready for use. (And one of the best out there is the &lt;a href="http://www.galasoft.ch/mvvm/getstarted/" target="_blank" shape="rect"&gt;MVVM Light Toolkit&lt;/a&gt;).
    &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Decouple&lt;/strong&gt; the ViewModels via shared media (Message queue) &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Send &lt;/strong&gt;messages to the Queue &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Receive&lt;/strong&gt; (Listen for) messages from the Queue &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;/ul&gt; &lt;h1&gt;The Bag of Tricks&lt;/h1&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;&lt;a href="http://blogs.msdn.com/b/deviations/archive/2009/06/06/my-first-silverlight-behavior.aspx" target="_blank" shape="rect"&gt;Behaviors&lt;/a&gt;&lt;/strong&gt; – gives us a way to define declaratively in XAML interactivity and also extends existing controls with new functionality. Behaviours can be attached to a Visual and this way add it new functionality like dragging, moving, floating, reflection and much more. They can be very helpful in order to separate any visual logic out of the View into separate behavior class, that do only something very specific. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.data.ivalueconverter(VS.95).aspx" target="_blank" shape="rect"&gt;Value Converters&lt;/a&gt;&lt;/strong&gt; – it’s a very useful technique to Convert a bound value to new one. Can be used for presentation purposes and converting a piece of data to something more readable. (Note that most of this can be done in the ViewModel directly). &lt;/li&gt; &lt;li&gt;&lt;strong&gt;&lt;a href="http://www.telerik.com/help/silverlight/common-data-binding-template-selectors.html" target="_blank" shape="rect"&gt;Template and Style Selectors&lt;/a&gt;&amp;nbsp;&lt;/strong&gt;– provides a way to apply data templates based on custom logic. Most of the time, you may use template selector when you want to use more than one data template for the same type data. &lt;/li&gt; &lt;/ul&gt; &lt;h1&gt;Benefits of MVVM&lt;/h1&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Separation of Concerns.&lt;/strong&gt; &lt;/li&gt; &lt;li&gt;Can &lt;strong&gt;Test&lt;/strong&gt; the UI. &lt;/li&gt; &lt;li&gt;Can &lt;strong&gt;Read&lt;/strong&gt; the code. &lt;/li&gt; &lt;li&gt;Can &lt;strong&gt;Maintain&lt;/strong&gt; the application. &lt;/li&gt; &lt;li&gt;Can &lt;strong&gt;Reuse&lt;/strong&gt; the view logic. &lt;/li&gt; &lt;li&gt;Better Designer and tools support. (&lt;strong&gt;Blendability&lt;/strong&gt;). &lt;/li&gt; &lt;li&gt;And much more… &lt;/li&gt; &lt;/ul&gt; &lt;h1&gt;Thank you for your time!&lt;/h1&gt; &lt;p&gt;I’ll keep this post codeless, but I’ve prepared for you an &lt;strong&gt;example project&lt;/strong&gt;, that demonstrates every one of these techniques, in a very obvious way. It is called &lt;strong&gt;RadWebBrowser&lt;/strong&gt; and is very basic(for the sake of simplicity) Silverlight out-of-browser Web Browser application. It also uses some of the great &lt;a href="http://www.telerik.com/products/silverlight.aspx" target="_blank" shape="rect"&gt;RadControls for Silverlight&lt;/a&gt;. I'm also using the Great &lt;a href="http://www.galasoft.ch/mvvm/getstarted/" shape="rect"&gt;MVVM Light toolkit &lt;/a&gt;- if you don't know it, please go &lt;a href="http://www.galasoft.ch/mvvm/getstarted/" shape="rect"&gt;there&lt;/a&gt;, download it and start using it. &lt;/p&gt; &lt;p&gt;Please drop me a line if you have any comments, questions or suggestion.&lt;a href="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/RadWebBrowser.sflb" shape="rect"&gt;&lt;strong&gt; &lt;/strong&gt;&lt;/a&gt;&lt;/p&gt; &lt;a href="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/RadWebBrowser.sflb" shape="rect"&gt;&lt;strong&gt; &lt;p&gt;Download it here.&lt;/p&gt; &lt;/strong&gt;&lt;/a&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MiroMiroslavovsBlog/~4/l_WFCP8PDko" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/MiroMiroslavovsBlog/~3/l_WFCP8PDko/the-world-of-model-ndash-view-ndash-viewmodel---through-my-eyes.aspx</link>
      <author>Miro Miroslavov</author>
      <comments>http://blogs.telerik.com/MiroMiroslavov/Posts/10-11-12/the-world-of-model-ndash-view-ndash-viewmodel---through-my-eyes.aspx</comments>
      <guid isPermaLink="false">d572cbe7-c1ac-4aa5-a937-039fad3a9992</guid>
      <pubDate>Fri, 12 Nov 2010 06:48:00 GMT</pubDate>
    <feedburner:origLink>http://blogs.telerik.com/MiroMiroslavov/Posts/10-11-12/the-world-of-model-ndash-view-ndash-viewmodel---through-my-eyes.aspx</feedburner:origLink></item>
    <item>
      <title>5+ Ways to Reduce your .Xap Size</title>
      <description>&lt;p&gt;Being Silverlight developer means that we are also kind of web&amp;nbsp;developers. From this point of view, we also have to think about the &lt;strong&gt;web traffic&lt;/strong&gt; that our applications generate. We need to reduce it as much as possible. So basically we need to reduce the size of the application's output - the &lt;strong&gt;.xap file&lt;/strong&gt;.&lt;/p&gt; &lt;p&gt;In this post I'll try to summarize the five ways to reduce the size of a xap that I've shared today&amp;nbsp;with&amp;nbsp;&lt;a href="http://silverlight.bg/Home.aspx" title="Silverlight User Group"&gt;Sofia's Silverlight User Group&lt;/a&gt;.&lt;/p&gt; &lt;h3&gt;Understanding the Xap&lt;/h3&gt; &lt;p&gt;In order to reduce the size of a xap file, we should first be aware of its structure.&amp;nbsp;Basically&amp;nbsp;it can contain only 4 things:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;AppManifest.xaml&lt;/strong&gt; - xaml file that identifies&amp;nbsp;the packaged assemblies and the application entry point &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Application Assembly&lt;/strong&gt; - the one that contains the Application class. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Library &lt;/strong&gt;assemblies. &lt;/li&gt; &lt;li&gt;&lt;strong&gt;Resource&lt;/strong&gt; files - like images and videos &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;So we can smaller its size by&amp;nbsp;reducing the code and resources of our assemblies, load assemblies on demand (exclude them from the xap) or minify some of the compiled library assemblies.&lt;/p&gt; &lt;h3&gt;Start with the Resources&lt;/h3&gt; &lt;p&gt;You should carefully think about the resources (Images, Videos...) - how you use and manage them! You have 3 options to choose from - embed them into assembly, add them as a content in the xap or leave them on the server as &lt;strong&gt;web content&lt;/strong&gt;. Note that the last option can reduce the xap significantly. You have to check their "Build Action" and choose the correct one:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;em&gt;Resource&lt;/em&gt; - The resource gets embedded into the&amp;nbsp;assembly, so&amp;nbsp;respectively&amp;nbsp;in the xap. &lt;/li&gt; &lt;li&gt;&lt;em&gt;Content - &lt;/em&gt;The resource gets embedded into the xap.&amp;nbsp; &lt;/li&gt; &lt;li&gt;&lt;em&gt;&lt;strong&gt;None &lt;/strong&gt;- &lt;span style="font-style: normal;"&gt;The resource won't be embedded into the assembly nor the xap. But you can "&lt;/span&gt;Copy&lt;span style="font-style: normal;"&gt; it &lt;/span&gt;to&lt;/em&gt; the&lt;em&gt; Output Directory&lt;span style="font-style: normal;"&gt;", so use it as web resource, thus Load it on Demand.&lt;/span&gt;&lt;br /&gt; &lt;/em&gt;&lt;/li&gt; &lt;/ul&gt; &lt;div&gt;You can read more about Silverlight resource files &lt;a href="http://msdn.microsoft.com/en-us/library/cc296240(VS.95).aspx" title="Resource Files on MSDN"&gt;here&lt;/a&gt;.&lt;/div&gt; &lt;h3&gt;Application Library Caching&lt;/h3&gt; &lt;div&gt;It allows you to exclude assemblies form the xap with just a single click option, mark them as &lt;em&gt;external parts&lt;/em&gt; and make them ready to be cached by the browser. I'm not going to dive into Assembly Caching, since Evan made a great post about it. Just &lt;a href="http://blogs.telerik.com/blogs/posts/10-01-04/application_library_caching_in_radcontrols_for_silverlight.aspx"&gt;read it &lt;/a&gt;and consider using it.&lt;/div&gt; &lt;h3&gt;Load assemblies on Demand&lt;/h3&gt; &lt;div&gt;This trick is possible due to the Silverlight API, that allows us to load assemblies into the AppDomain. We need to download one using simple WebClient, load it and use Reflection to use its types and resources. Although&amp;nbsp;this is tricky and kind of&amp;nbsp;obsolete (thanks to the &lt;a href="http://compositewpf.codeplex.com/"&gt;Prism&lt;/a&gt;), one can find it interesting and&amp;nbsp;implement&amp;nbsp;it on his/her own. You can &lt;a href="http://www.wintellect.com/CS/blogs/jprosise/archive/2008/10/22/cool-silverlight-trick-3.aspx"&gt;read more about this approach&lt;/a&gt;.&lt;/div&gt; &lt;h3&gt;Modularity with Prism&lt;/h3&gt; &lt;div&gt;Prism is probably the best approach out there for Silvrelight application development. The architecture allows us to slice the application into Moduls. Each module can be easily configured to be &lt;strong&gt;Loaded On Demand | When Available and On the&amp;nbsp;Background. &lt;/strong&gt;&amp;nbsp;So the resulting application consist of a lot of xaps and some of them are delayed and downloaded during run-time, which can significantly reduce the initial download time and&amp;nbsp;respectively enhance the overall user experience. Download the &lt;a href="http://compositewpf.codeplex.com/releases/view/51993"&gt;latest binaries&lt;/a&gt; and play with the modularity example projects.&lt;/div&gt; &lt;div&gt;&lt;em&gt;Note that if a Module reference assembly that is loaded with the main module, you can set its&amp;nbsp;&lt;strong&gt;CopyLocal = False &lt;/strong&gt;attribute, which means that the assembly won't be included into the xap. But since it will be already loaded into the AppDomain, everything is ok.&lt;/em&gt;&lt;/div&gt; &lt;h3&gt;Dead-code removing - Minification&lt;/h3&gt; &lt;div&gt; &lt;p&gt;Although the Prism give us so much&amp;nbsp;flexibility&amp;nbsp;and great features, it can't fix one problem that comes with using already compiled assemblies. The abstract problem is that it doesn't matter how much code or features you use from one assembly - you get it as a whole. This problem was addressed long time ago and the solution is named "&lt;a href="https://webvpn.telerik.com/ CSCO 0h75676763663A2F2F6A726F6963612E677279726576782E70627A  /wiki/Minification_(programming)&amp;lt;a href="&gt;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;a href="http://en.wikipedia.org/wiki/Minification_(programming)" title="Minification at wikipedia"&gt;Minification&lt;/a&gt;" (&lt;em&gt;the process of removing all unnecessary characters from source code, without changing its functionality&lt;/em&gt;). This is very popular trick in the JavaScript world (and it obviously makes&amp;nbsp;sense - to reduce the size of a web page, by removing unused JS code). In the Telerik's Silverlight world the solution is called &lt;a href="http://minifier.telerik.com/"&gt;Assembly Minifier&lt;/a&gt;. It reduces the compiled assemblies size by removing the controls (code and resources) that your application doesn't need during run-time. The result is smaller assemblies, smaller xap, which results in faster download time and faster application loading. You can read &lt;a href="http://blogs.telerik.com/miromiroslavov/posts/10-07-15/telerik_assembly_minifier_-_official_release.aspx"&gt;my post&lt;/a&gt; for more information on how to use the tool.&lt;/p&gt; &lt;h3&gt;Some more Tricks&lt;/h3&gt; &lt;div&gt; &lt;ul&gt; &lt;li&gt;&lt;strong&gt;Re-zip&lt;/strong&gt; your xap package using higher compression ratio. Read &lt;a href="http://blogs.telerik.com/valerihristov/posts/08-05-13/increasing_the_compression_ratio_of_the_xap_files.aspx"&gt;the full story&lt;/a&gt; by Valeri Hristov. &lt;/li&gt; &lt;li&gt;Configure &lt;strong&gt;long expiration&lt;/strong&gt; date on your IIS, so the xap will be cached by the user's browser, thus downloaded only once. &lt;/li&gt; &lt;li&gt;Create nice looking and professional&amp;nbsp;&lt;strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc903962(VS.95).aspx" title="How to define Splash screen at MSDN"&gt;SplashScreen &lt;/a&gt;&lt;/strong&gt;that will reduce the bad experience from downloading big xap package. &lt;/li&gt; &lt;/ul&gt; &lt;/div&gt; &lt;p&gt;Thank you for your time and keep in mind that the &lt;strong&gt;Xap size matters!&lt;/strong&gt;&lt;/p&gt; &lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MiroMiroslavovsBlog/~4/lnBhJgP_LdM" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/MiroMiroslavovsBlog/~3/lnBhJgP_LdM/5-ways-to-reduce-your-xap-size.aspx</link>
      <author>Miro Miroslavov</author>
      <comments>http://blogs.telerik.com/MiroMiroslavov/Posts/10-09-15/5-ways-to-reduce-your-xap-size.aspx</comments>
      <guid isPermaLink="false">958e850a-a239-4003-9436-ca5c7b3c318d</guid>
      <pubDate>Wed, 15 Sep 2010 09:00:00 GMT</pubDate>
    <feedburner:origLink>http://blogs.telerik.com/MiroMiroslavov/Posts/10-09-15/5-ways-to-reduce-your-xap-size.aspx</feedburner:origLink></item>
    <item>
      <title>Nesting Prism Regions using RadRibbonBar</title>
      <description>&lt;p&gt;This post is update to my first post about &lt;em&gt;"Decouple RadRibbonBar with Composite Silverlight (Prism)" (&lt;a href="http://blogs.telerik.com/miromiroslavov/posts/10-03-26/decouple_radribbonbar_with_composite_silverlight_prism.aspx"&gt;Read More&lt;/a&gt;)&lt;/em&gt;. Nesting Regions in Prism could sound weird to someone, but the demand for this is growing. Check &lt;a href="http://www.telerik.com/community/forums/silverlight/ribbonbar/radribbonbar-as-prism-region.aspx"&gt;this forum post &lt;/a&gt;for more info.&lt;/p&gt; &lt;p&gt;As a result to this post I've decided to update my previous example project. I've started by marking the one of the RibbonTabs as a Region as well, giving it a name &lt;em&gt;SalesTab&lt;/em&gt;.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div style="border: 1px solid #7f9db9; overflow-y: auto;" class="reCodeBlock"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerikRibbonBar:RadRibbonTab&lt;/code&gt; &lt;code style="color: #808080;"&gt;xmlns&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/a&gt;"&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #808080;"&gt;xmlns:x&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/a&gt;"&lt;/code&gt; &lt;code style="color: #808080;"&gt;x:Class&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"CustomersRibbonTab.Ribbon"&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #808080;"&gt;xmlns:telerikRibbonBar&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.RibbonBar"&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #808080;"&gt;Header&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Sales"&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #808080;"&gt;xmlns:Regions&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"clr-namespace:Microsoft.Practices.Composite.Presentation.Regions;assembly=Microsoft.Practices.Composite.Presentation"&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;strong&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #808080;"&gt;Regions:RegionManager.RegionName&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"SalesTab"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerikRibbonBar:RadRibbonGroup&lt;/code&gt; &lt;code style="color: #808080;"&gt;Header&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Sales"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerikRibbonBar:RadRibbonButton&lt;/code&gt; &lt;code style="color: #808080;"&gt;Content&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Add"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerikRibbonBar:RadRibbonButton&lt;/code&gt; &lt;code style="color: #808080;"&gt;Content&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Remove"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerikRibbonBar:RadRibbonGroup&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerikRibbonBar:RadRibbonTab&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;After that I've added a new project similar to the other Modul projects, but the main view will be of base type - RadRibbonGroup:&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div style="border: 1px solid #7f9db9; overflow-y: auto;" class="reCodeBlock"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerikRibbonBar:RadRibbonGroup&lt;/code&gt; &lt;code style="color: #808080;"&gt;xmlns&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/a&gt;"&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #808080;"&gt;xmlns:x&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/a&gt;"&lt;/code&gt; &lt;code style="color: #808080;"&gt;x:Class&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"SalesGroup.Group"&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #808080;"&gt;xmlns:telerikRibbonBar&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.RibbonBar"&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #808080;"&gt;Header&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Dynamic Sales"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerikRibbonBar:RadRibbonButton&lt;/code&gt; &lt;code style="color: #808080;"&gt;Content&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"First"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerikRibbonBar:RadRibbonButton&lt;/code&gt; &lt;code style="color: #808080;"&gt;Content&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Prev"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerikRibbonBar:RadRibbonButton&lt;/code&gt; &lt;code style="color: #808080;"&gt;Content&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Next"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerikRibbonBar:RadRibbonButton&lt;/code&gt; &lt;code style="color: #808080;"&gt;Content&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Last"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerikRibbonBar:RadRibbonGroup&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;And Finally add the new GroupModule to the bootstraper 's Module catalog.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div style="border: 1px solid #7f9db9; overflow-y: auto;" class="reCodeBlock"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;ModuleCatalog catalog = &lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;new&lt;/code&gt; &lt;code style="color: #000000;"&gt;ModuleCatalog()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;.AddModule(&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;typeof&lt;/code&gt;&lt;code style="color: #000000;"&gt;(CustomersRibbonTab.CustomersRibbonTabModule))&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;.AddModule(&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;typeof&lt;/code&gt;&lt;code style="color: #000000;"&gt;(SalesRibbonTab.SalesRibbonTabModule))&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;.AddModule(&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;typeof&lt;/code&gt;&lt;code style="color: #000000;"&gt;(SalesGroup.SalesGroupModule));&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;As a result I get nested Prism Regions, where the main region has two Tabs and the nested Region tab has one static Group and one Dynamic.&lt;/p&gt; &lt;p&gt;&lt;img alt="" src="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/NestedRibbon_1.sflb" /&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt; &lt;p&gt;I've also updated the project's referenced assemblies to the latest Prism and&amp;nbsp;Telerik binaries. Also migrated the project to Visual Studio 2010 using Silverlight 4.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Download the code &lt;/strong&gt;- &lt;a target="_blank" href="/Files/RadRibbonBarPrism.zip"&gt;RadRibbonBarPrism.zip&lt;/a&gt;&lt;/p&gt; &lt;p&gt;All comments and feedback are more than welcomed.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MiroMiroslavovsBlog/~4/usQX3LTbHzY" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/MiroMiroslavovsBlog/~3/usQX3LTbHzY/nesting-prism-regions-using-radribbonbar.aspx</link>
      <author>Miro Miroslavov</author>
      <comments>http://blogs.telerik.com/MiroMiroslavov/Posts/10-09-02/nesting-prism-regions-using-radribbonbar.aspx</comments>
      <guid isPermaLink="false">992a5793-267d-40ce-a85d-3f27f538355f</guid>
      <pubDate>Thu, 02 Sep 2010 08:25:11 GMT</pubDate>
    <feedburner:origLink>http://blogs.telerik.com/MiroMiroslavov/Posts/10-09-02/nesting-prism-regions-using-radribbonbar.aspx</feedburner:origLink></item>
    <item>
      <title>RadRibbonBar - Keyboard navigation using Key tips</title>
      <description>&lt;p&gt;The &lt;em&gt;Keyboard navigation&lt;/em&gt; major feature is now available with the Q2 ServicePack1 release. You can start using it immediately in WPF and Silverlight and as a result enhance your application’s &lt;strong&gt;Usability&lt;/strong&gt; and &lt;strong&gt;Accessibility&lt;/strong&gt;.&lt;/p&gt; &lt;h4&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-RadRibbonBarKeyboardnavigationusingKeyti_105FE-KeyTipsWin7_2.sflb"&gt;&lt;img height="161" width="777" style="border-width: 0px; display: inline;" title="KeyTipsWin7" alt="KeyTipsWin7" src="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-RadRibbonBarKeyboardnavigationusingKeyti_105FE-KeyTipsWin7_thumb.sflb" /&gt;&lt;/a&gt;&lt;/h4&gt; &lt;p&gt;&lt;a href="http://demos.telerik.com/silverlight/#RibbonBar/KeyTips"&gt;Try it yourself.&lt;/a&gt; &lt;/p&gt; &lt;h3&gt;The API&lt;/h3&gt; &lt;p&gt;The API is pretty straight-forward. First you should enable &lt;em&gt;Key tips, &lt;/em&gt;for the instance of a RadRibbonBar, with simple attached property like follows.&lt;/p&gt; &lt;div style="border: 1px solid #7f9db9; overflow-y: auto;" class="reCodeBlock"&gt; &lt;div style="background-color: #ffffff;"&gt; &lt;p&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerik:RadRibbonBar&lt;/code&gt; &lt;code style="color: #808080;"&gt;telerik:KeyTipService.IsKeyTipsEnabled&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"True"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;/div&gt; &lt;/div&gt; &lt;p&gt;Then you can attach &lt;em&gt;key tip&lt;/em&gt; text to every component in the RadRibbonBar with simple line of code.&lt;/p&gt; &lt;div style="border: 1px solid #7f9db9; overflow-y: auto;" class="reCodeBlock"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerik:ApplicationMenu&lt;/code&gt; &lt;code style="color: #808080;"&gt;telerik:KeyTipService.AccessText&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"F"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;Some components need alternative key tip activation text like the RibbonGroup. Foe example one could be used for the &lt;em&gt;DialogLauncher&lt;/em&gt; button and one for the group itself, when the group is collapsed due to insufficient space.&lt;/p&gt; &lt;div style="border: 1px solid #7f9db9; overflow-y: auto;" class="reCodeBlock"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerik:RadRibbonGroup&lt;/code&gt; &lt;code style="color: #808080;"&gt;telerik:KeyTipService.AccessText&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"FN"&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&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; &lt;/code&gt;&lt;span style="margin-left: 48px ! important;"&gt;&lt;code style="color: #808080;"&gt;telerik:KeyTipService.AltAccessText&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"ZF"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;h3&gt;Usage&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;You can show the key tips by pressing &lt;strong&gt;CTRL + Q &lt;/strong&gt;for Silverlight or &lt;strong&gt;ALT &lt;/strong&gt;for WPF. &lt;/li&gt; &lt;li&gt;When you select a key tip – it &lt;strong&gt;executes the control’s action&lt;/strong&gt;.
    &lt;ul&gt; &lt;li&gt;Selects RibbonTab &lt;/li&gt; &lt;li&gt;Opens DropDown or Split button &lt;/li&gt; &lt;li&gt;Opens Ribbon gallery &lt;/li&gt; &lt;li&gt;Drops ContextMenu &lt;/li&gt; &lt;li&gt;Executes click if normal Button &lt;/li&gt; &lt;li&gt;Toggles the state of ToggleButton &lt;/li&gt; &lt;li&gt;Expands RibbonGroup if it’s collapsed &lt;/li&gt; &lt;/ul&gt; &lt;/li&gt; &lt;li&gt;You can navigate back thought the layers of the key tips using &lt;strong&gt;Esc key&lt;/strong&gt;. &lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Features&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;Key tips are &lt;strong&gt;themeable &lt;/strong&gt;related to your selected telerik’s theme. &lt;/li&gt; &lt;li&gt;Can be &lt;strong&gt;customized &lt;/strong&gt;by changing KeyTipControl's ControlTemplate. &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&lt;a href="/Files/KeyTipsTestSL.zip"&gt;Download&lt;/a&gt; the sample project.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MiroMiroslavovsBlog/~4/3bNiX6AUqeU" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/MiroMiroslavovsBlog/~3/3bNiX6AUqeU/radribbonbar---keyboard-navigation-using-key-tips.aspx</link>
      <author>Miro Miroslavov</author>
      <comments>http://blogs.telerik.com/MiroMiroslavov/Posts/10-08-12/radribbonbar---keyboard-navigation-using-key-tips.aspx</comments>
      <guid isPermaLink="false">9fbf2d3e-71a0-480e-b29a-00d768c0696f</guid>
      <pubDate>Thu, 12 Aug 2010 05:00:00 GMT</pubDate>
    <feedburner:origLink>http://blogs.telerik.com/MiroMiroslavov/Posts/10-08-12/radribbonbar---keyboard-navigation-using-key-tips.aspx</feedburner:origLink></item>
    <item>
      <title>The first Ribbon Bar for Silverlight, to fully comply with the Microsoft fluent UI guidelines.</title>
      <description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;This week we will release new major feature for the RadRibbonBar – keyboard access.&lt;/p&gt;  &lt;p&gt;KeyTips provide keyboard access to every control in the Ribbon. They are activated by pressing the ALT key, following by the key for the button you want to activate. KeyTips are very well explained at the Microsoft’s fluent UI guidelines, you can read &lt;a href="http://msdn.microsoft.com/en-us/library/cc872782.aspx#accessKeysAndKeytips"&gt;more about KeyTips&lt;/a&gt; on msdn…&lt;/p&gt;  &lt;p&gt;This feature is in the &lt;strong&gt;Required&lt;/strong&gt; section from the Ribbon specification, but it’s nature and hard implementation details was preventing us from implementing it sooner. &lt;/p&gt;  &lt;p&gt;Currently this feature is the one with most votes in our &lt;a href="http://www.telerik.com/support/pits.aspx#/public/silverlight/318"&gt;PITS&lt;/a&gt; system, thus we considered it for high priority. &lt;/p&gt;  &lt;h3&gt;Announcing the first keyboard support for Silverlight Ribbon Bar.&lt;/h3&gt;  &lt;p&gt;Currently this is feature is not implemented by any other control vendor for Silverlight. Telerik is the first to offer this feature.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-ThefirstfullyfeaturedRibbonBarforSilverl_EA22-KeyTip1_10.sflb"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="KeyTip1" border="0" alt="KeyTip1" src="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-ThefirstfullyfeaturedRibbonBarforSilverl_EA22-KeyTip1_thumb_4.sflb" width="662" height="266" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;KeyTips are also available for the ApplicationMenu, QuickAccessToolbar, drop down items – DropDown buttons, Split Buttons, Collapsible panels and so forth.&lt;/p&gt;  &lt;p&gt;With KeyTips you can “execute” each action available on the Ribbon:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;You can simulate click on a button&lt;/li&gt;    &lt;li&gt;You can Open drop down contents&lt;/li&gt;    &lt;li&gt;You can expand collapsed groups (Editing – &lt;strong&gt;ZN&lt;/strong&gt; tip)&lt;/li&gt;    &lt;li&gt;You can execute Group dialog launcher.&lt;/li&gt;    &lt;li&gt;You can open galleries&lt;/li&gt;    &lt;li&gt;Drop down the ComboBox, check checkboxes and so on…&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;With other words – KeyTips should fully replace the mouse for those that wants to. And it will do it with the new RadRibbonBar.&lt;/p&gt;  &lt;p&gt;You may see the &lt;strong&gt;ApplicationMenu tips&lt;/strong&gt; as well.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-ThefirstfullyfeaturedRibbonBarforSilverl_EA22-KeyTip2_6.sflb"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="KeyTip2" border="0" alt="KeyTip2" src="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-ThefirstfullyfeaturedRibbonBarforSilverl_EA22-KeyTip2_thumb_2.sflb" width="660" height="604" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;You may also notice the new re-designed &lt;strong&gt;&lt;em&gt;ApplicationMenu &lt;/em&gt;&lt;/strong&gt;and &lt;em&gt;&lt;strong&gt;Collapse&lt;/strong&gt; button &lt;/em&gt;(on the top right).&lt;/p&gt;  &lt;h3&gt;It will be officially Available with the Service Pack 1.&lt;/h3&gt;  &lt;p&gt;You will be able to play with it later this week - with the internal build.&lt;/p&gt;  &lt;p&gt;In the following release you will see some more really nice RadRibbonBar features like:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Full DataBinding support&lt;/li&gt;    &lt;li&gt;New design for the ApplicationMenu&lt;/li&gt;    &lt;li&gt;Collapse Ribbon button&lt;/li&gt;    &lt;li&gt;And a lot more fixes&lt;/li&gt; &lt;/ul&gt;  &lt;h3&gt;What’s next for Telerik RadRibbonBar&lt;/h3&gt;  &lt;p&gt;For the next official release, we will be working on RadRibbonWindow for Silverlight (OOB) and &lt;strong&gt;Office 2010&lt;/strong&gt; Theme with &lt;strong&gt;Back-stage&lt;/strong&gt; functionality.&lt;/p&gt;  &lt;h3&gt;Also available for WPF.&lt;/h3&gt;  &lt;p&gt;As you already know, our suite is fully compatible with Silverlight and WPF as well, so the guys using Windows Presentation Foundation will also be able to use the keyboard navigation.&lt;/p&gt;  &lt;h3&gt;Hope you will enjoy this major feature. Thanks for your feedback.&lt;/h3&gt;&lt;img src="http://feeds.feedburner.com/~r/MiroMiroslavovsBlog/~4/zfj97PpjlFk" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/MiroMiroslavovsBlog/~3/zfj97PpjlFk/the-first-ribbon-bar-for-silverlight-to-fully-comply-with-the-microsoft-fluent-ui-guidelines.aspx</link>
      <author>Miro Miroslavov</author>
      <comments>http://blogs.telerik.com/MiroMiroslavov/Posts/10-07-26/the-first-ribbon-bar-for-silverlight-to-fully-comply-with-the-microsoft-fluent-ui-guidelines.aspx</comments>
      <guid isPermaLink="false">f3c72aa1-ae45-40a5-bf3a-12f074ee32f9</guid>
      <pubDate>Mon, 26 Jul 2010 13:40:00 GMT</pubDate>
    <feedburner:origLink>http://blogs.telerik.com/MiroMiroslavov/Posts/10-07-26/the-first-ribbon-bar-for-silverlight-to-fully-comply-with-the-microsoft-fluent-ui-guidelines.aspx</feedburner:origLink></item>
    <item>
      <title>Telerik Assembly Minifier - official release</title>
      <description>&lt;h3&gt;What is &lt;a href="http://www.telerik.com/products/silverlight/getting-started/assembly-minifier.aspx"&gt;Assembly Minifier&lt;/a&gt;&lt;/h3&gt; &lt;p&gt;If you still don’t know what it is:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;You should first read my &lt;a href="http://blogs.telerik.com/miromiroslavov/posts/10-06-10/telerik_assembly_minifier.aspx"&gt;previous post&lt;/a&gt;, where I announced the first Beta version of the tool&lt;/li&gt; &lt;li&gt;You can watch the “&lt;a href="http://tv.telerik.com/watch/introduction-assembly-minifier"&gt;Introduction to Assembly Minifier&lt;/a&gt;” video, kindly provided by Todd Anglin and &lt;a href="http://tv.telerik.com/"&gt;Telerik TV&lt;/a&gt;&lt;/li&gt; &lt;li&gt;You can read “&lt;em&gt;why Silverlight application size matters”&lt;/em&gt; (the xap file) and how &lt;strong&gt;Assembly Minifier&lt;/strong&gt; helps you reduce the XAP file size - by Todd Anglin. &lt;a href="http://telerikwatch.com/2010/06/minimize-silverlight-application-size.html"&gt;Read more…&lt;/a&gt;&lt;/li&gt; &lt;li&gt;You can go to &lt;a href="http://minifier.telerik.com/" title="http://minifier.telerik.com/"&gt;http://minifier.telerik.com/&lt;/a&gt;,&amp;nbsp; get your reduced Silverlight assemblies, build your application's XAP file with the new assemblies and significantly&amp;nbsp;improve your application performance and downloading experience&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;What is New in the Q2 2010 release?&lt;/h3&gt; &lt;p&gt;Among the great Q2 release of &lt;a href="http://www.telerik.com/products/silverlight.aspx"&gt;RadControls for Silverlight&lt;/a&gt; and the tons of new features, we have also been working hard to bring you more stable and better &lt;a href="http://minifier.telerik.com/"&gt;Assembly Minifier&lt;/a&gt; tool.&lt;/p&gt; &lt;p&gt;There are a lot of features coming with the official version:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;We now support minifying the &lt;strong&gt;themes’ &lt;/strong&gt;assemblies. Which means that you can now upload themes’ assemblies along with the controls and select the needed controls. At the end of the process you will get the new themes' assemblies having styles only for the controls you selected. The minifier client application uses this feature. As a result the Vista theme assembly was reduced &lt;strong&gt;from 2600+K to less then 400K &lt;/strong&gt;(&lt;strong&gt;25%&lt;/strong&gt; of the original size). And now the assembly contains only the styles for the couple of controls used in the Assembly Minifier UI. &lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-TelerikAssemblyMinifierofficiallylive_B304-Themes_6.sflb"&gt;&lt;img width="649" height="146" src="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-TelerikAssemblyMinifierofficiallylive_B304-Themes_thumb_2.sflb" alt="Themes" title="Themes" style="border: 0px none; display: inline;" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;em&gt;Minifying Vista theme for the Minifier UI. Comparison to the original sizes&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;The second major new feature is support for the &lt;strong&gt;Charting assembly&lt;/strong&gt;. Furthermore we now split the control into separate features, so you will be able to choose which features you need for your project&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-TelerikAssemblyMinifierofficiallylive_B304-Minifier_picture_2.sflb"&gt;&lt;img width="649" height="227" src="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-TelerikAssemblyMinifierofficiallylive_B304-Minifier_picture_thumb.sflb" alt="minifying chart" title="minifying chart" style="border: 0px none; display: inline;" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;em&gt;Minifying chart components.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;ul&gt; &lt;li&gt;We now support&lt;strong&gt;&amp;nbsp;Feature Based Selection&lt;/strong&gt;. Meaning that some controls have optional parts/features that you can select and at the end you will have even smaller control package, having only the needed parts/features&lt;/li&gt; &lt;li&gt;With the new version you are able to select for minifying even our theme &lt;strong&gt;Styles for the built-in Silverlight&lt;/strong&gt; controls like CheckBox, RadioButton, PaswordBox, TextBox and so on. Thus, you can download an assembly having only the themes for those controls. The item in the minifier's TreeView is called “&lt;strong&gt;&lt;em&gt;Silverlight Controls Styles&lt;/em&gt;&lt;/strong&gt;”&lt;/li&gt; &lt;li&gt;We also made a &lt;strong&gt;lot of improvements and fixes&lt;/strong&gt;&amp;nbsp;in the main XAML processing module. The XAML is reduced much better and efficient, resulting in smaller size and more correct assemblies&lt;/li&gt; &lt;/ul&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;What to expect from &lt;a href="http://minifier.telerik.com/"&gt;Assembly Minifier&lt;/a&gt;?&lt;/h3&gt; &lt;p&gt;Just a little insights about what to expect from the Assembly Minifier in the future.&lt;/p&gt; &lt;p&gt;For the next Quarter, we will work hard to bring you &lt;strong&gt;better user experience&lt;/strong&gt;. We will optimize the whole process, giving you much easier way to minimize your XAP files. We will also continue to work on improving the resulting assembly sizes and making &lt;a href="http://www.telerik.com/products/silverlight.aspx"&gt;our controls suite&lt;/a&gt; more “&lt;em&gt;minification suitable&lt;/em&gt;”.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;We will greatly appreciate your &lt;a href="http://www.telerik.com/community/forums/silverlight/assembly-minifier.aspx"&gt;feedback and comments&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MiroMiroslavovsBlog/~4/kD8kYIb84_M" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/MiroMiroslavovsBlog/~3/kD8kYIb84_M/telerik-assembly-minifier---official-release.aspx</link>
      <author>Miro Miroslavov</author>
      <comments>http://blogs.telerik.com/MiroMiroslavov/Posts/10-07-15/telerik-assembly-minifier---official-release.aspx</comments>
      <guid isPermaLink="false">c12ab7d7-e8eb-41e0-8669-a64f15eaf75b</guid>
      <pubDate>Thu, 15 Jul 2010 14:15:00 GMT</pubDate>
    <feedburner:origLink>http://blogs.telerik.com/MiroMiroslavov/Posts/10-07-15/telerik-assembly-minifier---official-release.aspx</feedburner:origLink></item>
    <item>
      <title>Telerik Assembly Minifier</title>
      <description>&lt;h3&gt;What is it?&lt;/h3&gt; &lt;p&gt;&lt;a href="http://minifier.telerik.com"&gt;Telerik Assembly Minifier&lt;/a&gt; is a tool that lets you extract only the controls’ classes and resources you need to use in your application development, thus significantly reducing the size of the assemblies. Using the &lt;a href="http://minifier.telerik.com"&gt;Assembly Minifier&lt;/a&gt; you will achieve significantly better loading time when the &lt;strong&gt;XAP&lt;/strong&gt; files containing the minified (optimized) assemblies are to be loaded on the client side.&lt;/p&gt; &lt;h3&gt;Reducing (minifying) the size of Telerik Silverlight assemblies&lt;/h3&gt; &lt;p&gt;In order to &lt;strong&gt;minify the assemblies&lt;/strong&gt;, you should:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;Open&lt;/strong&gt; the application at: &lt;a href="http://minifier.telerik.com"&gt;&lt;strong&gt;http://minifier.telerik.com&lt;/strong&gt;&lt;/a&gt;.&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Browse&lt;/strong&gt; and upload Telerik Silverlight Assemblies, the ones that you want to optimize. See the tips at the bottom, for more information on uploading.&lt;/li&gt; &lt;li&gt;After you &lt;strong&gt;select and upload&lt;/strong&gt; the assemblies,the Assembly Minifier will automatically start processing and analyzing the files.&lt;/li&gt; &lt;li&gt;Then, you will be able to select only the controls you will need in your application.&lt;/li&gt; &lt;li&gt;As soon as the analyzing process finishes, you will be able to see the relative size of each control.The size is just for comparison purposes and does not mean that the output assemblies will have the exact same size as shown in the TreeListView.&lt;/li&gt; &lt;li&gt;Once you finish the selection, you can click the &lt;strong&gt;Extract&lt;/strong&gt; button.&lt;/li&gt; &lt;li&gt;As soon the server processes the Extraction, you will be prompted to &lt;strong&gt;Save&lt;/strong&gt; a ZIP file containing the minified assemblies.&lt;/li&gt; &lt;li&gt;If you want to try the minified assemblies in an &lt;strong&gt;existing project&lt;/strong&gt;:&lt;/li&gt; &lt;ol&gt; &lt;li&gt;You should first &lt;strong&gt;remove&lt;/strong&gt; the references to the old assemblies&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Clean up&lt;/strong&gt; the Visual Studio Solution&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Add references&lt;/strong&gt; to the newly created (minified) assemblies&lt;/li&gt; &lt;li&gt;&lt;strong&gt;Build &lt;/strong&gt;the Solution&lt;/li&gt; &lt;/ol&gt; &lt;li&gt;If you want to use the minified assemblies in a new project you should simply add reference to the newly created assemblies in the project. If you have troubles referencing the assemblies, you may need to check the assembly files for the Lock bit and unlock them if needed – right click on the file, go to &lt;em&gt;Properties/Unlock assembly&lt;/em&gt;)&lt;/li&gt; &lt;/ol&gt; &lt;h3&gt;Here is how The Minifier looks like:&lt;/h3&gt; &lt;p&gt;&lt;a href="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-TelerikAssemblyMinifier_DD48-minifier_8.sflb"&gt;&lt;img height="548" width="644" style="border: 0px none; display: inline;" title="minifier" alt="minifier" src="http://blogs.telerik.com/Libraries/MetaBlogLib/WindowsLiveWriter-TelerikAssemblyMinifier_DD48-minifier_thumb_3.sflb" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;h3&gt;Tips for using the Assembly Minifier&lt;/h3&gt; &lt;ul&gt; &lt;li&gt;To get the best results from using the &lt;a href="http://minifier.telerik.com"&gt;Assembly Minifier&lt;/a&gt;, you should &lt;strong&gt;upload all referenced assemblies&lt;/strong&gt; (as well as the one that contains the controls you will need) – so that they will be minified according to your selection. For example if you want to use only &lt;em&gt;RadDocking &lt;/em&gt;from &lt;em&gt;Telerik.Windows.Controls.Docking.dll&lt;/em&gt;, you should also upload &lt;em&gt;Telerik.Windows.Controls.dll &lt;/em&gt;and &lt;em&gt;Telerik.Windows.Controls.Navigation.dll &lt;/em&gt;and select only RadDocking control&lt;em&gt;. &lt;/em&gt;This way you will get minified versions, of all referenced (above mentioned) assemblies, specifically for &lt;em&gt;RadDocking. &lt;/em&gt;In this example the output assembly - &lt;em&gt;Telerik.Windows.Controls.dll &lt;/em&gt;should be around &lt;strong&gt;400KB&lt;/strong&gt; (compared to &lt;strong&gt;1100KB&lt;/strong&gt;) and the &lt;em&gt;Telerik.Windows.Controls.Navigation.dll &lt;/em&gt;should be &lt;strong&gt;230KB&lt;/strong&gt; (compared to &lt;strong&gt;840KB&lt;/strong&gt;).&lt;/li&gt; &lt;li&gt;Some controls are using &lt;strong&gt;parts&lt;/strong&gt; that are not compulsory, so you should take care and select them manually. For example RadRibbonBar frequently uses the RadRibbonButton. To include RadRibbonButton in the minified assembly, you should select it.&lt;/li&gt; &lt;li&gt;For the moment you can NOT optimize &lt;strong&gt;RadChart&lt;/strong&gt;, &lt;strong&gt;DataVisualization &lt;/strong&gt;and &lt;strong&gt;Themes&lt;/strong&gt; assemblies, so you will not be allowed to upload them.&lt;/li&gt; &lt;/ul&gt; &lt;h3&gt;Thank you in advance for your feedback&lt;/h3&gt; &lt;p&gt;Since this version of &lt;a href="http://minifier.telerik.com"&gt;Telerik Assembly Minifier&lt;/a&gt; is &lt;strong&gt;beta&lt;/strong&gt; release, we encourage you to use Minified assemblies only for testing purposes and NOT in production.&lt;/p&gt; &lt;p&gt;All comments, feedback, feature requests and bug reports are welcome. &lt;a href="http://www.telerik.com/community/forums/silverlight/assembly-minifier.aspx" target="_blank"&gt;You can share your feedback in the public forum&lt;/a&gt;.&lt;/p&gt; &lt;h3&gt;In Addition&lt;/h3&gt; &lt;p&gt;Good to know is that the &lt;a href="http://minifier.telerik.com"&gt;Telerik Assembly Minifier&lt;/a&gt; client application uses minified assemblies, containing only RadTreeView, RadWindow, RadButton and RadUpload. After minifying we got &lt;strong&gt;400KB xap file&lt;/strong&gt; out of&lt;strong&gt; 800KB.&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://www.telerik.com/account/free-trials/trial-product-versions/single-trial.aspx?pmvid=2218&amp;amp;pid=0"&gt;RadControls for Silverlight and over 300 examples&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MiroMiroslavovsBlog/~4/OolQf9sFgDw" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/MiroMiroslavovsBlog/~3/OolQf9sFgDw/telerik-assembly-minifier.aspx</link>
      <author>Miro Miroslavov</author>
      <comments>http://blogs.telerik.com/MiroMiroslavov/Posts/10-06-10/telerik-assembly-minifier.aspx</comments>
      <guid isPermaLink="false">23db1fd3-bc3b-476c-a7aa-18de40860e32</guid>
      <pubDate>Thu, 10 Jun 2010 11:45:00 GMT</pubDate>
    <feedburner:origLink>http://blogs.telerik.com/MiroMiroslavov/Posts/10-06-10/telerik-assembly-minifier.aspx</feedburner:origLink></item>
    <item>
      <title>Decouple RadRibbonBar with Composite Silverlight (Prism)</title>
      <description>&lt;p&gt;Let's suppose we want to decouple our application that uses RadRibbonBar as a main menu. Doing this using &lt;a href="http://compositewpf.codeplex.com/"&gt;Composite Application Guidelines &lt;/a&gt;(Prism) is common scenario, so let's see how to achieve it. &lt;/p&gt; &lt;p&gt;We'll make our RadRibbonBar to serve as RegionManager (This is possible because RadRibbonBar inherits from ItemsControl) and the RadRibbonTabs as actual views that will be plugged-in.&lt;/p&gt; &lt;p&gt;So first we start with declaring RadRibbonBar as RegionManager :&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;div style="border: 1px solid #7f9db9; overflow-y: auto;" class="reCodeBlock"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerikRibbonBar:RadRibbonBar&lt;/code&gt; &lt;code style="color: #808080;"&gt;Regions:RegionManager.RegionName&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"RibbonRegion"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Having Region we can focus on creating the actual views. Let's add new Silverlight class library project and name it SalesRibbonTab. Now we need the view itself, so add new class let's say Ribbon that inherits from RadRibbonTab.&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;h4&gt;Ribbon.xaml.cs&lt;/h4&gt; &lt;div style="border: 1px solid #7f9db9; overflow-y: auto;" class="reCodeBlock"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;public partial class Ribbon : RadRibbonTab&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;public Ribbon()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #000000;"&gt;InitializeComponent();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;And associate xaml file with it.&lt;/p&gt; &lt;p&gt; &lt;/p&gt; &lt;h4&gt;Ribbon.xaml&lt;/h4&gt; &lt;div style="border: 1px solid #7f9db9; overflow-y: auto;" class="reCodeBlock"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerikRibbonBar:RadRibbonTab&lt;/code&gt; &lt;code style="color: #808080;"&gt;xmlns&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/a&gt;"&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #808080;"&gt;xmlns:x&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/a&gt;"&lt;/code&gt; &lt;code style="color: #808080;"&gt;x:Class&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"CustomersRibbonTab.Ribbon"&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #808080;"&gt;xmlns:telerikRibbonBar&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.RibbonBar"&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #808080;"&gt;Header&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Customers"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerikRibbonBar:RadRibbonGroup&lt;/code&gt; &lt;code style="color: #808080;"&gt;Header&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Cusomers"&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerikRibbonBar:RadRibbonButton&lt;/code&gt; &lt;code style="color: #808080;"&gt;Content&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Add"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerikRibbonBar:RadRibbonButton&lt;/code&gt; &lt;code style="color: #808080;"&gt;Content&lt;/code&gt;&lt;code style="color: #000000;"&gt;=&lt;/code&gt;&lt;code style="color: blue;"&gt;"Remove"&lt;/code&gt; &lt;code style="color: #000000;"&gt;/&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerikRibbonBar:RadRibbonGroup&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;&amp;lt;/&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;telerikRibbonBar:RadRibbonTab&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;Ok. Now we need a class that will serve as the glue between the RegionManager and the actual View. It has to inherit from IModule and lets name it &lt;/p&gt; &lt;h4&gt;SalesRibbonTabModule.cs&lt;/h4&gt; &lt;p&gt; &lt;/p&gt; &lt;div style="border: 1px solid #7f9db9; overflow-y: auto;" class="reCodeBlock"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;public class SalesRibbonTabModule : IModule&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;private readonly IRegionManager regionManager;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;public SalesRibbonTabModule(IRegionManager regionManager)&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #000000;"&gt;this.regionManager = regionManager;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;public void Initialize()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #000000;"&gt;regionManager.RegisterViewWithRegion("RibbonRegion", typeof(Ribbon));&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Having the SalesRibbonTabModule class, now we need to add instance of it to the ModuleCatalog in the Bootstrapper class.&lt;/p&gt; &lt;h4&gt;Bootstrapper.cs&lt;/h4&gt; &lt;div style="border: 1px solid #7f9db9; overflow-y: auto;" class="reCodeBlock"&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;public class Bootstrapper : UnityBootstrapper&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;protected override DependencyObject CreateShell()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #000000;"&gt;Shell shell = Container.Resolve&amp;lt;&lt;/code&gt;&lt;code style="color: #006699; font-weight: bold;"&gt;Shell&lt;/code&gt;&lt;code style="color: #000000;"&gt;&amp;gt;();&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #000000;"&gt;Application.Current.RootVisual = shell;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #000000;"&gt;return shell;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;protected override IModuleCatalog GetModuleCatalog()&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;{&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #000000;"&gt;ModuleCatalog catalog = new ModuleCatalog()&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt; &lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #000000;"&gt;.AddModule(typeof(SalesRibbonTab.SalesRibbonTabModule));&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 24px ! important;"&gt;&lt;code style="color: #000000;"&gt;return catalog;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #ffffff;"&gt;&lt;span&gt;&lt;code&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/code&gt;&lt;span style="margin-left: 12px ! important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;div style="background-color: #f8f8f8;"&gt;&lt;span&gt;&lt;span style="margin-left: 0px ! important;"&gt;&lt;code style="color: #000000;"&gt;}&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt; &lt;/div&gt; &lt;p&gt;Now we are all set and can use all the benefits of Composing the UI.&lt;/p&gt; &lt;p&gt;Download the demo project including the Prism dlls from &lt;a href="http://blogs.telerik.com/Libraries/MiroMiroslavov_s_Library/RadRibbonBarPrism.sflb?download=true"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;[Update]&lt;/strong&gt; The project is updated and improved in new post. &lt;a href="http://blogs.telerik.com/miromiroslavov/posts/10-09-02/nesting_prism_regions_using_radribbonbar.aspx"&gt;Find more.&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;p&gt;&lt;/p&gt;&lt;img src="http://feeds.feedburner.com/~r/MiroMiroslavovsBlog/~4/o8Vat7TTQx8" height="1" width="1"/&gt;</description>
      <link>http://feedproxy.google.com/~r/MiroMiroslavovsBlog/~3/o8Vat7TTQx8/decouple-radribbonbar-with-composite-silverlight-prism.aspx</link>
      <author>Miro Miroslavov</author>
      <comments>http://blogs.telerik.com/MiroMiroslavov/Posts/10-03-26/decouple-radribbonbar-with-composite-silverlight-prism.aspx</comments>
      <guid isPermaLink="false">616ce172-70e1-490a-9b81-a2cc892d10c4</guid>
      <pubDate>Fri, 26 Mar 2010 10:23:36 GMT</pubDate>
    <feedburner:origLink>http://blogs.telerik.com/MiroMiroslavov/Posts/10-03-26/decouple-radribbonbar-with-composite-silverlight-prism.aspx</feedburner:origLink></item>
  </channel>
</rss>

