<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Janne Mattila's blog : Silverlight</title><link>http://blogs.msdn.com/jannemattila/archive/tags/Silverlight/default.aspx</link><description>Tags: Silverlight</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Creating Localization Tool with Silverlight</title><link>http://blogs.msdn.com/jannemattila/archive/2008/06/08/creating-localization-tool-with-silverlight.aspx</link><pubDate>Sun, 08 Jun 2008 15:11:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8580696</guid><dc:creator>jannemattila</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/jannemattila/comments/8580696.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jannemattila/commentrss.aspx?PostID=8580696</wfw:commentRss><description>&lt;p&gt;Since &lt;a href="http://silverlight.net/GetStarted/" mce_href="http://silverlight.net/GetStarted/" target="_blank"&gt;Silverlight 2&lt;/a&gt; is in Beta 2 phase it’s definately time to create small application with it. Together with my &lt;a href="http://jarmoh.spaces.live.com/" mce_href="http://jarmoh.spaces.live.com/" target="_blank"&gt;friend&lt;/a&gt; we’e created small example application called &lt;i&gt;Localization Tool&lt;/i&gt;. Idea in our example application is pretty simple... allow end users to modify texts used in application. And for the end user it should be easy, intuitive and of course fast. We used a lot of information available from internet in order to help us in the implementation (see links at the end of this post). &lt;/p&gt; &lt;p&gt;Before going into implementation details you can check out the final solution in action (click the image to open video in new window):&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;a href="http://silverlight.services.live.com/invoke/48523/xEncoderApp0/iframe.html" title="Silverlight Localization Tool in action" mce_href="http://silverlight.services.live.com/invoke/48523/xEncoderApp0/iframe.html" target="_blank"&gt;&lt;img src="http://blogs.msdn.com/blogfiles/jannemattila/WindowsLiveWriter/CreatingLocalizationToolwithSilverlight_195A/Localization%20Tool_2141408c-2006-4e97-8f68-9ce334353abf.png" alt="Localization Tool" mce_src="http://blogs.msdn.com/blogfiles/jannemattila/WindowsLiveWriter/CreatingLocalizationToolwithSilverlight_195A/Localization%20Tool_2141408c-2006-4e97-8f68-9ce334353abf.png" border="0" height="361" width="640"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;In our solution we took WCF + LINQ + SQL approach and created following simple datatable:&lt;br&gt;&lt;img src="http://blogs.msdn.com/blogfiles/jannemattila/WindowsLiveWriter/CreatingLocalizationToolwithSilverlight_195A/Localization%20Tool%20table_f27bf6b5-aa8f-442e-b047-4d8321fd6f2c.png" alt="Localization Tool table" mce_src="http://blogs.msdn.com/blogfiles/jannemattila/WindowsLiveWriter/CreatingLocalizationToolwithSilverlight_195A/Localization%20Tool%20table_f27bf6b5-aa8f-442e-b047-4d8321fd6f2c.png" border="0" height="131" width="308"&gt; &lt;br&gt;That table is then used to store data like this:&lt;br&gt;&lt;img src="http://blogs.msdn.com/blogfiles/jannemattila/WindowsLiveWriter/CreatingLocalizationToolwithSilverlight_195A/Localization%20Tool%20table%20data_c9c96871-7919-46eb-8d31-6c0eb2e358a7.png" alt="Localization Tool table data" mce_src="http://blogs.msdn.com/blogfiles/jannemattila/WindowsLiveWriter/CreatingLocalizationToolwithSilverlight_195A/Localization%20Tool%20table%20data_c9c96871-7919-46eb-8d31-6c0eb2e358a7.png" border="0" height="149" width="485"&gt; &lt;br&gt;After that we’ve created LINQ to SQL data class for our table:&lt;br&gt;&lt;img src="http://blogs.msdn.com/blogfiles/jannemattila/WindowsLiveWriter/CreatingLocalizationToolwithSilverlight_195A/Localization%20Tool%20table%20data%20classes_33435a74-44f0-404b-a1fb-887b6b84e955.png" alt="Localization Tool table data classes" mce_src="http://blogs.msdn.com/blogfiles/jannemattila/WindowsLiveWriter/CreatingLocalizationToolwithSilverlight_195A/Localization%20Tool%20table%20data%20classes_33435a74-44f0-404b-a1fb-887b6b84e955.png" border="0" height="163" width="202"&gt; &lt;br&gt;Then we created service that provides data access to our localization table. All code behind that service is here:&lt;/p&gt; &lt;table cellspacing="10"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td align="right" valign="top"&gt;&lt;pre&gt;&lt;font color="gray"&gt;1&lt;br&gt;2&lt;br&gt;3&lt;br&gt;4&lt;br&gt;5&lt;br&gt;6&lt;br&gt;7&lt;br&gt;8&lt;br&gt;9&lt;br&gt;10&lt;br&gt;11&lt;br&gt;12&lt;br&gt;13&lt;br&gt;14&lt;br&gt;15&lt;br&gt;16&lt;br&gt;17&lt;br&gt;18&lt;br&gt;19&lt;br&gt;20&lt;br&gt;21&lt;br&gt;22&lt;br&gt;23&lt;br&gt;24&lt;br&gt;25&lt;br&gt;26&lt;br&gt;27&lt;br&gt;28&lt;br&gt;29&lt;br&gt;30&lt;br&gt;31&lt;br&gt;32&lt;br&gt;33&lt;br&gt;34&lt;br&gt;35&lt;br&gt;36&lt;br&gt;37&lt;br&gt;38&lt;br&gt;39&lt;br&gt;40&lt;br&gt;41&lt;br&gt;42&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td valign="top"&gt;&lt;pre&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt; System;&lt;br&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt; System.Collections.Generic;&lt;br&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt; System.Linq;&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;namespace&lt;/font&gt; LocalizationTool_Web&lt;br&gt;{&lt;br&gt;  &lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;class&lt;/font&gt; &lt;font color="#2b91af"&gt;LocalizationService&lt;/font&gt; : &lt;font color="#2b91af"&gt;ILocalizationService&lt;br&gt;&lt;/font&gt;  {&lt;br&gt;    &lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#2b91af"&gt;List&lt;/font&gt;&amp;lt;&lt;font color="#2b91af"&gt;Localization&lt;/font&gt;&amp;gt; GetLocalizationByLanguage(&lt;font color="#0000ff"&gt;string&lt;/font&gt; language)&lt;br&gt;    {&lt;br&gt;      &lt;font color="#2b91af"&gt;LocalizationDataClassesDataContext&lt;/font&gt; dataContext = &lt;br&gt;        &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#2b91af"&gt;LocalizationDataClassesDataContext&lt;/font&gt;();&lt;br&gt;      &lt;font color="#0000ff"&gt;var&lt;/font&gt; query = &lt;font color="#0000ff"&gt;from&lt;/font&gt; localization &lt;font color="#0000ff"&gt;in&lt;/font&gt; dataContext.Localizations&lt;br&gt;            &lt;font color="#0000ff"&gt;where&lt;/font&gt; localization.Language.Equals(language)&lt;br&gt;            &lt;font color="#0000ff"&gt;select&lt;/font&gt; localization;&lt;br&gt;      &lt;font color="#0000ff"&gt;return&lt;/font&gt; query.ToList();&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    &lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; UpdateLocalization(&lt;font color="#2b91af"&gt;Localization&lt;/font&gt; localization)&lt;br&gt;    {&lt;br&gt;      &lt;font color="#2b91af"&gt;LocalizationDataClassesDataContext&lt;/font&gt; dataContext = &lt;br&gt;        &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#2b91af"&gt;LocalizationDataClassesDataContext&lt;/font&gt;();&lt;br&gt;      &lt;font color="#0000ff"&gt;var&lt;/font&gt; updateRow = dataContext.Localizations.First(&lt;br&gt;        loc =&amp;gt; &lt;br&gt;          loc.LanguageKey.Equals(localization.LanguageKey) &amp;amp;&amp;amp; &lt;br&gt;          loc.Language.Equals(localization.Language));&lt;br&gt;      updateRow.Text = localization.Text;&lt;br&gt;      updateRow.Comment = localization.Comment;&lt;br&gt;      dataContext.SubmitChanges();&lt;br&gt;    }&lt;br&gt;&lt;br&gt;    &lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#2b91af"&gt;String&lt;/font&gt; [] GetLocales()&lt;br&gt;    {&lt;br&gt;      &lt;font color="#2b91af"&gt;LocalizationDataClassesDataContext&lt;/font&gt; dataContext = &lt;br&gt;        &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#2b91af"&gt;LocalizationDataClassesDataContext&lt;/font&gt;();&lt;br&gt;      &lt;font color="#0000ff"&gt;var&lt;/font&gt; query = (&lt;font color="#0000ff"&gt;from&lt;/font&gt; localization &lt;font color="#0000ff"&gt;in&lt;/font&gt; dataContext.Localizations&lt;br&gt;             &lt;font color="#0000ff"&gt;select&lt;/font&gt; localization.Language).Distinct();&lt;br&gt;&lt;br&gt;      &lt;font color="#0000ff"&gt;return&lt;/font&gt; query.ToArray();&lt;br&gt;    }&lt;br&gt;  }&lt;br&gt;}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Now we’re ready to create UI for our application! We’ve used stackpanels for the layout management and then we used few &lt;i&gt;Style&lt;/i&gt; elements to make things look little bit better. &lt;br&gt;Here is small example about the styles in our &lt;i&gt;App.xaml&lt;/i&gt;:&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table cellspacing="10"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="right" valign="top"&gt;&lt;pre&gt;&lt;font color="gray"&gt;1&lt;br&gt;2&lt;br&gt;3&lt;br&gt;4&lt;br&gt;5&lt;br&gt;6&lt;br&gt;7&lt;br&gt;8&lt;br&gt;9&lt;br&gt;10&lt;br&gt;11&lt;br&gt;12&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td valign="top"&gt;&lt;pre&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#a31515"&gt;Application&lt;/font&gt;&lt;font color="#ff0000"&gt; xmlns&lt;/font&gt;&lt;font color="#0000ff"&gt;="http://schemas.microsoft.com/client/2007"&lt;br&gt;&lt;/font&gt;      &lt;font color="#ff0000"&gt; xmlns&lt;/font&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;font color="#ff0000"&gt;x&lt;/font&gt;&lt;font color="#0000ff"&gt;="http://schemas.microsoft.com/winfx/2006/xaml"&lt;/font&gt; &lt;br&gt;      &lt;font color="#ff0000"&gt; x&lt;/font&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;font color="#ff0000"&gt;Class&lt;/font&gt;&lt;font color="#0000ff"&gt;="LocalizationTool.App"&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#a31515"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#a31515"&gt;Application.Resources&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#a31515"&gt;    &lt;br&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#a31515"&gt;Style&lt;/font&gt;&lt;font color="#ff0000"&gt; x&lt;/font&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;font color="#ff0000"&gt;Key&lt;/font&gt;&lt;font color="#0000ff"&gt;="Border"&lt;/font&gt;&lt;font color="#ff0000"&gt; TargetType&lt;/font&gt;&lt;font color="#0000ff"&gt;="Border"&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#a31515"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#a31515"&gt;Setter&lt;/font&gt;&lt;font color="#ff0000"&gt; Property&lt;/font&gt;&lt;font color="#0000ff"&gt;="CornerRadius"&lt;/font&gt;&lt;font color="#ff0000"&gt; Value&lt;/font&gt;&lt;font color="#0000ff"&gt;="10"/&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#a31515"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#a31515"&gt;Setter&lt;/font&gt;&lt;font color="#ff0000"&gt; Property&lt;/font&gt;&lt;font color="#0000ff"&gt;="Background"&lt;/font&gt;&lt;font color="#ff0000"&gt; Value&lt;/font&gt;&lt;font color="#0000ff"&gt;="#FFdedede"/&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#a31515"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#a31515"&gt;Setter&lt;/font&gt;&lt;font color="#ff0000"&gt; Property&lt;/font&gt;&lt;font color="#0000ff"&gt;="VerticalAlignment"&lt;/font&gt;&lt;font color="#ff0000"&gt; Value&lt;/font&gt;&lt;font color="#0000ff"&gt;="Top"/&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#a31515"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#a31515"&gt;Setter&lt;/font&gt;&lt;font color="#ff0000"&gt; Property&lt;/font&gt;&lt;font color="#0000ff"&gt;="Margin"&lt;/font&gt;&lt;font color="#ff0000"&gt; Value&lt;/font&gt;&lt;font color="#0000ff"&gt;="8,8,8,8"/&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#a31515"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#a31515"&gt;Style&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#008000"&gt;&amp;lt;!-- ... and few more styles ... –&amp;gt;&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;br&gt;At the &lt;i&gt;UserControl_Loaded&lt;/i&gt; we query for all the possible locales so that we can list them add the &lt;i&gt;ListBox.&lt;/i&gt; Here is the code for that (unfortunately the code looks terrible since it’s splitted into several rows only for display reasons):&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table cellspacing="10"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="right" valign="top"&gt;&lt;pre&gt;&lt;font color="gray"&gt;1&lt;br&gt;2&lt;br&gt;3&lt;br&gt;4&lt;br&gt;5&lt;br&gt;6&lt;br&gt;7&lt;br&gt;8&lt;br&gt;9&lt;br&gt;10&lt;br&gt;11&lt;br&gt;12&lt;br&gt;13&lt;br&gt;14&lt;br&gt;15&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td valign="top"&gt;&lt;pre&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; UserControl_Loaded(&lt;font color="#0000ff"&gt;object&lt;/font&gt; sender, &lt;font color="#2b91af"&gt;RoutedEventArgs&lt;/font&gt; e)&lt;br&gt;{&lt;br&gt;  LocalizationClientService.&lt;font color="#2b91af"&gt;LocalizationServiceClient&lt;/font&gt; client = &lt;br&gt;    &lt;font color="#0000ff"&gt;new&lt;/font&gt; LocalizationTool.LocalizationClientService.&lt;font color="#2b91af"&gt;LocalizationServiceClient&lt;/font&gt;();&lt;br&gt;  client.GetLocalesCompleted += &lt;br&gt;    &lt;font color="#0000ff"&gt;new&lt;/font&gt; &lt;font color="#2b91af"&gt;EventHandler&lt;/font&gt;&amp;lt;LocalizationClientService.&lt;font color="#2b91af"&gt;GetLocalesCompletedEventArgs&lt;/font&gt;&amp;gt;&lt;br&gt;      (client_GetLocalesCompleted);&lt;br&gt;  client.GetLocalesAsync();&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt; client_GetLocalesCompleted(&lt;font color="#0000ff"&gt;object&lt;/font&gt; sender, &lt;br&gt;  LocalizationClientService.&lt;font color="#2b91af"&gt;GetLocalesCompletedEventArgs&lt;/font&gt; e)&lt;br&gt;{&lt;br&gt;  languages.ItemsSource = e.Result;&lt;br&gt;}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Using that same method we query all the localizations specific for that selected locale. There’s nothing fancy about that.. but let’s look at the search functionality little bit closer.&lt;br&gt;Our search button was defined like this in our &lt;i&gt;Page.xaml&lt;/i&gt;:&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table cellspacing="10"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="right" valign="top"&gt;&lt;pre&gt;&lt;font color="gray"&gt;1&lt;br&gt;2&lt;br&gt;3&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td valign="top"&gt;&lt;pre&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#a31515"&gt;TextBox&lt;/font&gt;&lt;font color="#ff0000"&gt; Style&lt;/font&gt;&lt;font color="#0000ff"&gt;="{&lt;/font&gt;&lt;font color="#a31515"&gt;StaticResource&lt;/font&gt;&lt;font color="#ff0000"&gt; TextBox&lt;/font&gt;&lt;font color="#0000ff"&gt;}"&lt;/font&gt; &lt;br&gt;    &lt;font color="#ff0000"&gt; TextChanged&lt;/font&gt;&lt;font color="#0000ff"&gt;="searchCriteria_TextChanged"&lt;/font&gt; &lt;br&gt;    &lt;font color="#ff0000"&gt; x&lt;/font&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;font color="#ff0000"&gt;Name&lt;/font&gt;&lt;font color="#0000ff"&gt;="searchCriteria" /&amp;gt;&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;And in our code behind we had following code to execute the query:&lt;br&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table cellspacing="10"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="right" valign="top"&gt;&lt;pre&gt;&lt;font color="gray"&gt;1&lt;br&gt;2&lt;br&gt;3&lt;br&gt;4&lt;br&gt;5&lt;br&gt;6&lt;br&gt;7&lt;br&gt;8&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td valign="top"&gt;&lt;pre&gt;&lt;font color="#2b91af"&gt;String&lt;/font&gt; search = searchCriteria.Text.ToLower();&lt;br&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt; query = &lt;font color="#0000ff"&gt;from&lt;/font&gt; row &lt;font color="#0000ff"&gt;in&lt;/font&gt; rows&lt;br&gt;      &lt;font color="#0000ff"&gt;where&lt;br&gt;&lt;/font&gt;        row.LanguageKey.ToLower().Contains(search) ||&lt;br&gt;        row.Text.ToLower().Contains(search) ||&lt;br&gt;        row.Comment.ToLower().Contains(search)&lt;br&gt;      &lt;font color="#0000ff"&gt;select&lt;/font&gt; row;&lt;br&gt;SetDatagridItemSource(query.ToArray());&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;And you can probably pretty easily see that actually that search box functionality doesn’t retrieve data from server at all. It uses the previously retrieved data (variable &lt;i&gt;rows&lt;/i&gt;) and filters out it by using linq. Therefore the performance is really good.&lt;/p&gt;
&lt;p&gt;We also added functionality to view two different languages at the same time. This helps to make the translations since the user can directly see what’s the equivalent row in another language. This was implemented withthe concept &lt;i&gt;base language. &lt;/i&gt;User can select what language he/she wants to use at the compare. Here’s example of that:&lt;br&gt;&lt;img src="http://blogs.msdn.com/blogfiles/jannemattila/WindowsLiveWriter/CreatingLocalizationToolwithSilverlight_195A/Localization%20Tool%20lock%20base%20language_f0b9535b-7415-4dbb-8df8-25c5f3fde44e.png" alt="Localization Tool lock base language" mce_src="http://blogs.msdn.com/blogfiles/jannemattila/WindowsLiveWriter/CreatingLocalizationToolwithSilverlight_195A/Localization%20Tool%20lock%20base%20language_f0b9535b-7415-4dbb-8df8-25c5f3fde44e.png" border="0" height="81" width="401"&gt;&amp;nbsp; &lt;br&gt;This was implemented by using the &lt;i&gt;RowDetails&lt;/i&gt; of datagrid. Here is the xaml of our datagrid:&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;table cellspacing="10"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="right" valign="top"&gt;&lt;pre&gt;&lt;font color="gray"&gt;1&lt;br&gt;2&lt;br&gt;3&lt;br&gt;4&lt;br&gt;5&lt;br&gt;6&lt;br&gt;7&lt;br&gt;8&lt;br&gt;9&lt;br&gt;10&lt;br&gt;11&lt;br&gt;12&lt;br&gt;13&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td valign="top"&gt;&lt;pre&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#a31515"&gt;System_Windows_Controls&lt;/font&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;font color="#a31515"&gt;DataGrid&lt;/font&gt; &lt;br&gt;  &lt;font color="#ff0000"&gt; AutoGenerateColumns&lt;/font&gt;&lt;font color="#0000ff"&gt;="True"&lt;/font&gt;&lt;font color="#ff0000"&gt; x&lt;/font&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;font color="#ff0000"&gt;Name&lt;/font&gt;&lt;font color="#0000ff"&gt;="resultsDatagrid"&lt;br&gt;&lt;/font&gt;  &lt;font color="#ff0000"&gt; Width&lt;/font&gt;&lt;font color="#0000ff"&gt;="770"&lt;/font&gt;&lt;font color="#ff0000"&gt; Height&lt;/font&gt;&lt;font color="#0000ff"&gt;="290"&lt;/font&gt;&lt;font color="#ff0000"&gt; Margin&lt;/font&gt;&lt;font color="#0000ff"&gt;="10,10,10,10"&lt;br&gt;&lt;/font&gt;  &lt;font color="#ff0000"&gt; CommittingEdit&lt;/font&gt;&lt;font color="#0000ff"&gt;="resultsDatagrid_CommittingEdit"&lt;br&gt;&lt;/font&gt;  &lt;font color="#ff0000"&gt; SelectionChanged&lt;/font&gt;&lt;font color="#0000ff"&gt;="resultsDatagrid_SelectionChanged"&lt;br&gt;&lt;/font&gt;  &lt;font color="#ff0000"&gt; LoadingRowDetails&lt;/font&gt;&lt;font color="#0000ff"&gt;="resultsDatagrid_LoadingRowDetails"&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#a31515"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#a31515"&gt;System_Windows_Controls&lt;/font&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;font color="#a31515"&gt;DataGrid.RowDetailsTemplate&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#a31515"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#a31515"&gt;DataTemplate&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#a31515"&gt;      &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#a31515"&gt;StackPanel&lt;/font&gt;&lt;font color="#ff0000"&gt; x&lt;/font&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;font color="#ff0000"&gt;Name&lt;/font&gt;&lt;font color="#0000ff"&gt;="tooltipPanel"&lt;/font&gt; &lt;br&gt;            &lt;font color="#ff0000"&gt; Orientation&lt;/font&gt;&lt;font color="#0000ff"&gt;="Horizontal"&lt;/font&gt;&lt;font color="#ff0000"&gt; Background&lt;/font&gt;&lt;font color="#0000ff"&gt;="LightYellow" /&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#a31515"&gt;    &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#a31515"&gt;DataTemplate&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;br&gt;&lt;/font&gt;&lt;font color="#a31515"&gt;  &lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#a31515"&gt;System_Windows_Controls&lt;/font&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;font color="#a31515"&gt;DataGrid.RowDetailsTemplate&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;br&gt;&amp;lt;/&lt;/font&gt;&lt;font color="#a31515"&gt;System_Windows_Controls&lt;/font&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;font color="#a31515"&gt;DataGrid&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;And in &lt;i&gt;resultsDatagrid_LoadingRowDetails &lt;/i&gt;we just searched for the corresponding data row from our local base language array. If row was found then we dynamically created &lt;i&gt;TextBoxes&lt;/i&gt; to display the values of base language.&lt;/p&gt;
&lt;p&gt;This was just small example application that demonstrates the possibilities of Silverlight. Hopefully you got the idea that you can do pretty cool business applications with it.&lt;br&gt;&lt;br&gt;Anyways... Happy hacking!&lt;br&gt;&lt;br&gt;J&lt;/p&gt;
&lt;h3&gt;Links:&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://silverlight.net/GetStarted/" mce_href="http://silverlight.net/GetStarted/" target="_blank"&gt;Silverlight.Net - Getting started&lt;/a&gt;&lt;br&gt;&lt;a href="http://blogs.msdn.com/swiss_dpe_team/archive/2008/03/17/silverlight-2-beta1-wcf-linq-to-sql-a-powerfull-combination.aspx" mce_href="http://blogs.msdn.com/swiss_dpe_team/archive/2008/03/17/silverlight-2-beta1-wcf-linq-to-sql-a-powerfull-combination.aspx" target="_blank"&gt;Silverlight 2 Beta1 + WCF + LINQ to SQL = a powerfull combination&lt;/a&gt;&lt;br&gt;&lt;a href="http://silverlight.net/learn/tutorials/sqldatagrid.aspx" mce_href="http://silverlight.net/learn/tutorials/sqldatagrid.aspx" target="_blank"&gt;Displaying SQL Database Data in a DataGrid using LINQ and WCF&lt;/a&gt;&lt;br&gt;&lt;a href="http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-3-using-networking-to-retrieve-data-and-populate-a-datagrid.aspx" mce_href="http://weblogs.asp.net/scottgu/pages/silverlight-tutorial-part-3-using-networking-to-retrieve-data-and-populate-a-datagrid.aspx" target="_blank"&gt;Scott Guthrie: Silverlight Tutorial Part 3: Using Networking to Retrieve Data and Populate a DataGrid&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8580696" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/jannemattila/attachment/8580696.ashx" length="240744" type="application/zip" /><category domain="http://blogs.msdn.com/jannemattila/archive/tags/Programming/default.aspx">Programming</category><category domain="http://blogs.msdn.com/jannemattila/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Create Silverlight 1.1 applications for SharePoint with VS2008</title><link>http://blogs.msdn.com/jannemattila/archive/2007/12/19/create-silverlight-1-1-applications-for-sharepoint-with-vs2008.aspx</link><pubDate>Thu, 20 Dec 2007 00:26:56 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:6809950</guid><dc:creator>jannemattila</dc:creator><slash:comments>11</slash:comments><comments>http://blogs.msdn.com/jannemattila/comments/6809950.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jannemattila/commentrss.aspx?PostID=6809950</wfw:commentRss><description>&lt;p&gt;Title says it all :-) My plan is to create small walkthrough how you can create your own Silverlight 1.1 application with Visual Studio 2008 and then run it in SharePoint. And I don't want to install a lot of stuff to my SharePoint environment so I'll just create simple web part to host the Silverlight application. All development work will be done outside SharePoint environment.&lt;/p&gt; &lt;p&gt;If you're new to Silverlight then I suggest you start by looking at least &lt;a href="http://silverlight.net/" target="_blank"&gt;silverlight.net&lt;/a&gt; and cool &lt;a href="http://blogs.msdn.com/coding4fun/archive/2007/09/19/5002772.aspx" target="_blank"&gt;Coding4Fun Silverlight 8-Ball example&lt;/a&gt;. The first link is starting point for Silverlight development and the second one is really cool sample that shows how can you create 8-Ball game with Silverlight. &lt;/p&gt; &lt;p&gt;Now you know something about Silverlight :-) So we can get started with my example. &lt;/p&gt; &lt;p&gt;I have VS2008 running on my Vista and I have downloaded and installed &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=25144C27-6514-4AD4-8BCB-E2E051416E03&amp;amp;displaylang=en" target="_blank"&gt;Microsoft Silverlight 1.1 Tools Alpha for Visual Studio 2008&lt;/a&gt; to help me developing Silverlight applications. It has new project template that has all the necessary stuff already set up to build Silverlight 1.1 application. I also have SharePoint running in my Virtual PC and it's configured so that I can connect to it directly from my host machine (i.e. http://demo1:1000 in my host IE connects to the virtualized SharePoint).&lt;/p&gt; &lt;p&gt;At first I'll modify SharePoint so that I can host my new applications in there. Let's add few folders under &lt;em&gt;_LAYOUTS&lt;/em&gt;:&lt;/p&gt; &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="247" alt="IIS1" src="http://blogs.msdn.com/blogfiles/jannemattila/WindowsLiveWriter/Cre.1applicationsforSharePointwithVS2008_6AC4/IIS1_3.png" width="157" border="0"&gt; &lt;/p&gt; &lt;p&gt;&lt;em&gt;ClientBin&lt;/em&gt; is folder that will contain all Silverlight client .&lt;em&gt;dll&lt;/em&gt; files (=if you build your Silverlight project you automatically get &lt;em&gt;ClientBin&lt;/em&gt; under your project folder which contains your projects client assemblies). &lt;/p&gt; &lt;p&gt;&lt;em&gt;Silverlight&lt;/em&gt; folder is used to store .&lt;em&gt;xaml&lt;/em&gt; files (=Silverlight pages). I also need to change settings for both of them in order make things work. First I'll change &lt;em&gt;ClientBin&lt;/em&gt; settings:&lt;/p&gt; &lt;p&gt;Set only &lt;em&gt;Read&lt;/em&gt; access and also set &lt;em&gt;Execute permissions&lt;/em&gt; to &lt;em&gt;None&lt;/em&gt;:&lt;/p&gt; &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="336" alt="IIS2" src="http://blogs.msdn.com/blogfiles/jannemattila/WindowsLiveWriter/Cre.1applicationsforSharePointwithVS2008_6AC4/IIS2_6.png" width="356" border="0"&gt; &lt;/p&gt; &lt;p&gt;Then I'll add &lt;em&gt;.dll&lt;/em&gt; to allowed mime types (and &lt;em&gt;.pdb&lt;/em&gt; for future debugging purposes :-):&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/jannemattila/WindowsLiveWriter/Cre.1applicationsforSharePointwithVS2008_6AC4/IIS3_2.png" target="_blank"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="474" alt="IIS3" src="http://blogs.msdn.com/blogfiles/jannemattila/WindowsLiveWriter/Cre.1applicationsforSharePointwithVS2008_6AC4/IIS3_thumb.png" width="563" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Then I'll change the &lt;em&gt;Silverlight&lt;/em&gt; folders settings to support &lt;em&gt;.xaml&lt;/em&gt; extension:&lt;/p&gt; &lt;p&gt;&lt;img height="117" alt="IIS4" src="http://blogs.msdn.com/blogfiles/jannemattila/WindowsLiveWriter/Cre.1applicationsforSharePointwithVS2008_6AC4/IIS4_041be262-c995-4972-984e-a12164162ccc.png" width="350" border="0"&gt; &lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Now SharePoint is set up... but let's create web part that will actually host the Silverlight application in our page. Here's the code for that:&lt;/p&gt; &lt;table cellspacing="10"&gt; &lt;tbody&gt; &lt;tr&gt; &lt;td valign="top" align="right"&gt;&lt;pre&gt;&lt;font color="gray"&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td valign="top"&gt;&lt;pre&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt; System;
&lt;font color="#0000ff"&gt;using&lt;/font&gt; System.Runtime.InteropServices;
&lt;font color="#0000ff"&gt;using&lt;/font&gt; System.Web.UI;
&lt;font color="#0000ff"&gt;using&lt;/font&gt; System.Web.UI.WebControls.WebParts;

&lt;font color="#0000ff"&gt;namespace&lt;/font&gt; Silverlight_Web_Part
{
  [&lt;font color="#2b91af"&gt;Guid&lt;/font&gt;(&lt;font color="#a31515"&gt;"fc852641-9955-433c-945e-d773f46351eb"&lt;/font&gt;)]
  &lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;class&lt;/font&gt; &lt;font color="#2b91af"&gt;Silverlight_Web_Part&lt;/font&gt; : &lt;font color="#008080"&gt;WebPart&lt;/font&gt;
  {
    &lt;font color="#0000ff"&gt;string&lt;/font&gt; xamlFile;
    [&lt;font color="#008080"&gt;WebBrowsable&lt;/font&gt;(&lt;font color="#0000ff"&gt;true&lt;/font&gt;), &lt;font color="#008080"&gt;Personalizable&lt;/font&gt;(&lt;font color="#0000ff"&gt;true&lt;/font&gt;)]
    &lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;string&lt;/font&gt; XamlFile
    {
      &lt;font color="#0000ff"&gt;get&lt;/font&gt; { &lt;font color="#0000ff"&gt;return&lt;/font&gt; xamlFile; }
      &lt;font color="#0000ff"&gt;set&lt;/font&gt; { xamlFile = &lt;font color="#0000ff"&gt;value&lt;/font&gt;; }
    }

    &lt;font color="#0000ff"&gt;public&lt;/font&gt; Silverlight_Web_Part()
    {
      &lt;font color="#0000ff"&gt;this&lt;/font&gt;.ExportMode = &lt;font color="#008080"&gt;WebPartExportMode&lt;/font&gt;.All;
    }

    &lt;font color="#0000ff"&gt;protected&lt;/font&gt; &lt;font color="#0000ff"&gt;override&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; Render(&lt;font color="#008080"&gt;HtmlTextWriter&lt;/font&gt; writer)
    {
      &lt;font color="#0000ff"&gt;if&lt;/font&gt; (&lt;font color="#0000ff"&gt;string&lt;/font&gt;.IsNullOrEmpty(&lt;font color="#0000ff"&gt;this&lt;/font&gt;.XamlFile) == &lt;font color="#0000ff"&gt;false&lt;/font&gt;)
      {
        writer.Write(&lt;font color="#a31515"&gt;"&amp;lt;div id='SilverlightControlHost' "&lt;/font&gt; + 
          &lt;font color="#a31515"&gt;"style='width: 640px; height: 480px;'&amp;gt;&amp;lt;/div&amp;gt;"&lt;/font&gt;);
        writer.Write(&lt;font color="#a31515"&gt;"&amp;lt;script type='text/javascript' "&lt;/font&gt; +
            &lt;font color="#a31515"&gt;"language='JavaScript' src='/_layouts/Silverlight.js'&amp;gt;&amp;lt;/script&amp;gt;"&lt;/font&gt;);
        writer.Write(&lt;font color="#a31515"&gt;"&amp;lt;script type='text/javascript' "&lt;/font&gt; +
          &lt;font color="#a31515"&gt;"language='JavaScript' src='/_layouts/SilverlightStarter.js'&amp;gt;&amp;lt;/script&amp;gt;"&lt;/font&gt;);
        writer.Write(&lt;font color="#a31515"&gt;"&amp;lt;script type='text/javascript' "&lt;/font&gt; +
          &lt;font color="#a31515"&gt;"language='JavaScript'&amp;gt;createSilverlight('"&lt;/font&gt; + xamlFile + &lt;font color="#a31515"&gt;"');&amp;lt;/script&amp;gt;"&lt;/font&gt;);
      }
      &lt;font color="#0000ff"&gt;else
&lt;/font&gt;      {
        writer.Write(&lt;font color="#a31515"&gt;"Xaml file is not selected."&lt;/font&gt;);
      }
    }
  }
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;My web part uses &lt;em&gt;Silverlight.js&lt;/em&gt; and &lt;em&gt;SilverlightStarter.js&lt;/em&gt; files. &lt;em&gt;SilverLight.js&lt;/em&gt; is the same file that is included at the project when you create Silverlight 1.1 project in VS. &lt;em&gt;SilverlightStarter.js&lt;/em&gt; is almost copy paste from that project template too but I have just modified it a little bit to support sending XAML file as parameter:&lt;/p&gt;
&lt;table cellspacing="10"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" align="right"&gt;&lt;pre&gt;&lt;font color="gray"&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td valign="top"&gt;&lt;pre&gt;&lt;font color="#0000ff"&gt;function&lt;/font&gt; createSilverlight(filename)
{
  Silverlight.createObjectEx({
    source: filename,
    parentElement: document.getElementById(&lt;font color="#a31515"&gt;"SilverlightControlHost"&lt;/font&gt;),
    id: &lt;font color="#a31515"&gt;"SilverlightControl"&lt;/font&gt;,
    properties: {
      width: &lt;font color="#a31515"&gt;"100%"&lt;/font&gt;,
      height: &lt;font color="#a31515"&gt;"100%"&lt;/font&gt;,
      version: &lt;font color="#a31515"&gt;"1.1"&lt;/font&gt;,
      enableHtmlAccess: &lt;font color="#a31515"&gt;"true"
&lt;/font&gt;    },
    events: {}
  });
   
  document.body.onload = &lt;font color="#0000ff"&gt;function&lt;/font&gt;() {
   &lt;font color="#0000ff"&gt;var&lt;/font&gt; silverlightControl = document.getElementById(&lt;font color="#a31515"&gt;'SilverlightControl'&lt;/font&gt;);
   &lt;font color="#0000ff"&gt;if&lt;/font&gt; (silverlightControl)
   silverlightControl.focus();
  }
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;And if you checkout my web part code on line 35 you actually notice that I'll just pass on the XAML file that has been set in web part properties:&lt;/p&gt;
&lt;p&gt;&lt;img height="117" alt="WebPart" src="http://blogs.msdn.com/blogfiles/jannemattila/WindowsLiveWriter/Cre.1applicationsforSharePointwithVS2008_6AC4/WebPart_46bb276c-02b5-434d-8ccc-024e7b7515ab.png" width="239" border="0"&gt; &lt;/p&gt;
&lt;p&gt;Now we just need to add some Silverlight stuff and we're done. So here is the content of the &lt;em&gt;Page.xaml &lt;/em&gt;(=THE application :-):&lt;/p&gt;
&lt;table cellspacing="10"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" align="right"&gt;&lt;pre&gt;&lt;font color="gray"&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td valign="top"&gt;&lt;pre&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#a31515"&gt;Canvas&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#ff0000"&gt;x:Name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;"&lt;font color="#0000ff"&gt;parentCanvas&lt;/font&gt;"
&lt;font color="#0000ff"&gt;    &lt;/font&gt;&lt;font color="#ff0000"&gt;xmlns&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;"&lt;font color="#0000ff"&gt;http://schemas.microsoft.com/client/2007&lt;/font&gt;"&lt;font color="#0000ff"&gt; 
    &lt;/font&gt;&lt;font color="#ff0000"&gt;xmlns:x&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;"&lt;font color="#0000ff"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/font&gt;"&lt;font color="#0000ff"&gt; 
    &lt;/font&gt;&lt;font color="#ff0000"&gt;Loaded&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;"&lt;font color="#0000ff"&gt;Page_Loaded&lt;/font&gt;"&lt;font color="#0000ff"&gt; 
    &lt;/font&gt;&lt;font color="#ff0000"&gt;x:Class&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;"&lt;font color="#0000ff"&gt;MySilverLight.Page;assembly=/_LAYOUTS/ClientBin/MySilverLight.dll&lt;/font&gt;"
&lt;font color="#0000ff"&gt;    &lt;/font&gt;&lt;font color="#ff0000"&gt;Width&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;"&lt;font color="#0000ff"&gt;640&lt;/font&gt;"
&lt;font color="#0000ff"&gt;    &lt;/font&gt;&lt;font color="#ff0000"&gt;Height&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;"&lt;font color="#0000ff"&gt;480&lt;/font&gt;"
&lt;font color="#0000ff"&gt;    &lt;/font&gt;&lt;font color="#ff0000"&gt;Background&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;"&lt;font color="#0000ff"&gt;White&lt;/font&gt;"&lt;font color="#0000ff"&gt;    
    &amp;gt;

 &amp;lt;&lt;/font&gt;&lt;font color="#a31515"&gt;Rectangle&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#ff0000"&gt;x:Name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;"&lt;font color="#0000ff"&gt;MyRectangle&lt;/font&gt;"&lt;font color="#0000ff"&gt; 
       &lt;/font&gt;&lt;font color="#ff0000"&gt;Canvas.Top&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;"&lt;font color="#0000ff"&gt;25&lt;/font&gt;"&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#ff0000"&gt;Canvas.Left&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;"&lt;font color="#0000ff"&gt;25&lt;/font&gt;"&lt;font color="#0000ff"&gt; 
       &lt;/font&gt;&lt;font color="#ff0000"&gt;Width&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;"&lt;font color="#0000ff"&gt;50&lt;/font&gt;"&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#ff0000"&gt;Height&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;"&lt;font color="#0000ff"&gt;50&lt;/font&gt;"&lt;font color="#0000ff"&gt; 
       &lt;/font&gt;&lt;font color="#ff0000"&gt;Fill&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;"&lt;font color="#0000ff"&gt;Gray&lt;/font&gt;"&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#ff0000"&gt;MouseLeftButtonDown&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;"&lt;font color="#0000ff"&gt;MyMouseLeftButtonDown&lt;/font&gt;"&lt;font color="#0000ff"&gt; /&amp;gt;
 &amp;lt;&lt;/font&gt;&lt;font color="#a31515"&gt;TextBlock&lt;/font&gt;&lt;font color="#0000ff"&gt; &lt;/font&gt;&lt;font color="#ff0000"&gt;x:Name&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;"&lt;font color="#0000ff"&gt;MyText&lt;/font&gt;"&lt;font color="#0000ff"&gt; 
       &lt;/font&gt;&lt;font color="#ff0000"&gt;Text&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;"&lt;font color="#0000ff"&gt;Click either rectangle or me&lt;/font&gt;"&lt;font color="#0000ff"&gt; 
       &lt;/font&gt;&lt;font color="#ff0000"&gt;MouseLeftButtonDown&lt;/font&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;"&lt;font color="#0000ff"&gt;MyMouseLeftButtonDown&lt;/font&gt;"&lt;font color="#0000ff"&gt; /&amp;gt;
&amp;lt;/&lt;/font&gt;&lt;font color="#a31515"&gt;Canvas&lt;/font&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;And my code behind &lt;em&gt;Page.xaml.cs&lt;/em&gt; contains following code:&lt;/p&gt;
&lt;table cellspacing="10"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td valign="top" align="right"&gt;&lt;pre&gt;&lt;font color="gray"&gt;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td valign="top"&gt;&lt;pre&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt; System;
&lt;font color="#0000ff"&gt;using&lt;/font&gt; System.Windows.Controls;

&lt;font color="#0000ff"&gt;namespace&lt;/font&gt; MySilverLight
{
  &lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;partial&lt;/font&gt; &lt;font color="#0000ff"&gt;class&lt;/font&gt; &lt;font color="#2b91af"&gt;Page&lt;/font&gt; : &lt;font color="#2b91af"&gt;Canvas
&lt;/font&gt;  {
    &lt;font color="#2b91af"&gt;DateTime&lt;/font&gt; started = &lt;font color="#2b91af"&gt;DateTime&lt;/font&gt;.Now;

    &lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; Page_Loaded(&lt;font color="#0000ff"&gt;object&lt;/font&gt; o, &lt;font color="#2b91af"&gt;EventArgs&lt;/font&gt; e)
    {
      &lt;font color="#008000"&gt;// Required to initialize variables
&lt;/font&gt;      InitializeComponent();
    }

    &lt;font color="#0000ff"&gt;public&lt;/font&gt; &lt;font color="#0000ff"&gt;void&lt;/font&gt; MyMouseLeftButtonDown(&lt;font color="#0000ff"&gt;object&lt;/font&gt; o, &lt;font color="#2b91af"&gt;EventArgs&lt;/font&gt; e)
    {
      &lt;font color="#0000ff"&gt;string&lt;/font&gt; runningTime = (&lt;font color="#2b91af"&gt;DateTime&lt;/font&gt;.Now - started).TotalSeconds.ToString(&lt;font color="#a31515"&gt;"F2"&lt;/font&gt;);
      System.Windows.Shapes.&lt;font color="#2b91af"&gt;Rectangle&lt;/font&gt; rectangle = o &lt;font color="#0000ff"&gt;as&lt;/font&gt; System.Windows.Shapes.&lt;font color="#2b91af"&gt;Rectangle&lt;/font&gt;;
      &lt;font color="#0000ff"&gt;if&lt;/font&gt; (rectangle != &lt;font color="#0000ff"&gt;null&lt;/font&gt;)
      {
        MyRectangle.Opacity = 1;
        MyText.Text = &lt;font color="#a31515"&gt;"You clicked rectangle! Application has been running for "&lt;/font&gt; + 
          runningTime + &lt;font color="#a31515"&gt;" seconds."&lt;/font&gt;;
      }

      System.Windows.Controls.&lt;font color="#2b91af"&gt;TextBlock&lt;/font&gt; textBlock = o &lt;font color="#0000ff"&gt;as&lt;/font&gt; System.Windows.Controls.&lt;font color="#2b91af"&gt;TextBlock&lt;/font&gt;;
      &lt;font color="#0000ff"&gt;if&lt;/font&gt; (textBlock != &lt;font color="#0000ff"&gt;null&lt;/font&gt;)
      {
        MyRectangle.Opacity = MyRectangle.Opacity * 0.8;
        MyText.Text = &lt;font color="#a31515"&gt;"You clicked text block! Rectangle is fading away..."&lt;/font&gt;;
      }
    }
  }
}&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;Now you're probably eager to know what our application actually does :-) Here is our application just after request:&lt;/p&gt;
&lt;p&gt;&lt;img height="393" alt="SilverLight1" src="http://blogs.msdn.com/blogfiles/jannemattila/WindowsLiveWriter/Cre.1applicationsforSharePointwithVS2008_6AC4/SilverLight1_3.png" width="501" border="0"&gt; &lt;/p&gt;
&lt;p&gt;And if user clicks the rectangle...&lt;/p&gt;
&lt;p&gt;&lt;img height="159" alt="SilverLight2" src="http://blogs.msdn.com/blogfiles/jannemattila/WindowsLiveWriter/Cre.1applicationsforSharePointwithVS2008_6AC4/SilverLight2_945827d5-a39a-404d-9481-77b3e4a0b6c6.png" width="570" border="0"&gt; &lt;/p&gt;
&lt;p&gt;If user clicks the text...&lt;/p&gt;
&lt;p&gt;&lt;img height="158" alt="SilverLight3" src="http://blogs.msdn.com/blogfiles/jannemattila/WindowsLiveWriter/Cre.1applicationsforSharePointwithVS2008_6AC4/SilverLight3_794d2597-a3ab-4992-bf22-ab6fe394d542.png" width="414" border="0"&gt; &lt;/p&gt;
&lt;p&gt;Now we have working development environment so that we could build ant test Silverlight 1.1 applications and host them in SharePoint. Here are the steps so that you can (try :-) to do it yourself.&lt;/p&gt;
&lt;p&gt;1) Create new Silverlight project in VS2008&lt;br&gt;2) Code :-)&lt;br&gt;3) Build your solution&lt;br&gt;4) Copy contents of &lt;em&gt;ClientBin\*.*&lt;/em&gt; to the SharePoint &lt;em&gt;_LAYOUTS\ClientBin&lt;/em&gt; folder&lt;br&gt;5) Copy &lt;em&gt;*.xaml&lt;/em&gt; files from your project to the SharePoint &lt;em&gt;Silverlight &lt;/em&gt;folder (&lt;strong&gt;Note: &lt;/strong&gt;you need to verify correct path in &lt;em&gt;x:Class&lt;/em&gt;! See my &lt;em&gt;Page.xaml&lt;/em&gt; and line 5 in source)&lt;br&gt;6) Create page that uses Silverlight web part and select your newly created XAML file&lt;/p&gt;
&lt;p&gt;&lt;br&gt;Here was my small intro to Silverlight 1.1 with SharePoint. In this example I just used static &lt;em&gt;.xaml&lt;/em&gt; files sitting in file system in order to make everything as simple as possible... I just wanted to demo how you can start experimenting with this combination. This can be extended and improved in many different ways and I'll probably come back to those in my future posts. &lt;br&gt;&lt;br&gt;Anyways... Happy hacking!&lt;br&gt;&lt;br&gt;J&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=6809950" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jannemattila/archive/tags/Microsoft+Office+SharePoint+Server+2007/default.aspx">Microsoft Office SharePoint Server 2007</category><category domain="http://blogs.msdn.com/jannemattila/archive/tags/Silverlight/default.aspx">Silverlight</category></item></channel></rss>