{"id":5283,"date":"2007-10-30T17:14:00","date_gmt":"2007-10-30T17:14:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/vbteam\/2007\/10\/30\/silverlight-ux-musings-controlling-alignment-of-ui-elements-corrina-barber\/"},"modified":"2024-07-05T14:39:24","modified_gmt":"2024-07-05T21:39:24","slug":"silverlight-ux-musings-controlling-alignment-of-ui-elements-corrina-barber","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/vbteam\/silverlight-ux-musings-controlling-alignment-of-ui-elements-corrina-barber\/","title":{"rendered":"Silverlight Ux Musings: Controlling Alignment of UI Elements [Corrina Barber]"},"content":{"rendered":"<p class=\"MsoNormal\"><span><font size=\"3\"><font face=\"Calibri\">This is my first post on the VB blog! I&rsquo;m a designer on the team with a background in visual and interaction design, and I also have some .NET coding experience. I plan to start blogging on the VB blog on a regular basis, and my goal is to share some of my thoughts on and explorations with Silverlight.<\/p>\n<p><\/font><\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font size=\"3\"><font face=\"Calibri\">I&rsquo;m sych&#8217;d about the possibilities enabled by Silverlight for many reasons, but, being a designer, one of the main reasons is that I can actually get cool UI implemented exactly as I envisioned. I love that I can create unique and beautiful UI in Blend, bring it into Visual Studio, and then add the interactivity and business logic I desire using VB.<\/p>\n<p><\/font><\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font size=\"3\"><font face=\"Calibri\">So anyway, one of the first things I did when I began my Silverlight explorations was to layout my XAML UI where some elements aligned left and some elements aligned right, and I wanted to make sure my UI remained exactly as I had planned even if the browser was at a size I hadn&rsquo;t planned for. I found that Silverlight 1.1 didn&rsquo;t have a container control to help me do this (at least not yet), so I quickly coded up a solution to this problem, and that&rsquo;s what I&rsquo;m going to share today. <\/p>\n<p><\/font><\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">Just one additional blurb before we dive into things, this solution targets a specific problem, but it can be used in many other ways. The gist of the solution enables sharing of events and data between VB and JavaScript code, so with a little imagination you&rsquo;ll be able to envision many other uses of the concepts presented in this post. In fact the <\/font><\/span><a href=\"http:\/\/silverlight.net\/QuickStarts\/Dom\/ManagedCodeAccess.aspx\"><span><font face=\"Calibri\" size=\"3\">Silverlight.NET site offers information on this same concept<\/font><\/span><\/a><span><font size=\"3\"><font face=\"Calibri\">, in case you would like to explore things further.<\/p>\n<p><\/font><\/font><\/span><\/p>\n<p class=\"MsoNormal\"><b><span>Solution Screen Shots<\/p>\n<p><\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span><font size=\"3\"><font face=\"Calibri\">The images below show how the little yellow buttons that are aligned right remain properly aligned right even as the browser is resized&hellip;<\/font><\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><font size=\"3\"><font face=\"Calibri\"><\/p>\n<p><\/font><\/font><\/span><\/p>\n<p class=\"MsoNormal\"><span><\/span><span><\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><b><span><img decoding=\"async\" title=\"Alignment of Ux on resize in Silverlight\" height=\"276\" alt=\"Alignment of Ux on resize in Silverlight\" hspace=\"10\" src=\"https:\/\/devblogs.microsoft.com\/vbteam\/wp-content\/uploads\/sites\/7\/2007\/10\/AlignImg.jpg\" width=\"378\" align=\"left\"><\/span><\/b><\/p>\n<p class=\"MsoNormal\"><b><span><\/span><\/b>&nbsp;<\/p>\n<p class=\"MsoNormal\"><b><span><\/span><\/b>&nbsp;<\/p>\n<p class=\"MsoNormal\"><b><span><\/span><\/b>&nbsp;<\/p>\n<p class=\"MsoNormal\"><b><span><\/span><\/b>&nbsp;<\/p>\n<p class=\"MsoNormal\"><b><span><\/span><\/b>&nbsp;<\/p>\n<p class=\"MsoNormal\"><b><span><\/span><\/b>&nbsp;<\/p>\n<p class=\"MsoNormal\"><b><span><\/span><\/b>&nbsp;<\/p>\n<p class=\"MsoNormal\"><b><span><\/span><\/b>&nbsp;<\/p>\n<p class=\"MsoNormal\"><b><span>Necessities<\/p>\n<p><\/span><\/b><\/p>\n<p class=\"MsoNormal\"><span><font face=\"Calibri\" size=\"3\">Specific details can be found on the <\/font><\/span><a href=\"http:\/\/silverlight.net\/GetStarted\/\"><span><font face=\"Calibri\" size=\"3\">Silverlight.NET site<\/font><\/span><\/a><b><span><\/p>\n<p><\/span><\/b><\/p>\n<p class=\"MsoListParagraph\"><span><span>&sect;<span>&nbsp; <\/span><\/span><\/span><span>Microsoft Silverlight 1.1 Alpha September Refresh<b><span><\/p>\n<p><\/span><\/b><\/span><\/p>\n<p class=\"MsoListParagraph\"><span><span>&sect;<span>&nbsp; <\/span><\/span><\/span><span>Visual Studio 2008 Beta2<b><span><\/p>\n<p><\/span><\/b><\/span><\/p>\n<p class=\"MsoListParagraph\"><span><span>&sect;<span>&nbsp; <\/span><\/span><\/span><span>Microsoft Silverlight Tools Alpha Refresh for Visual Studio 2008 Beta 2 (July 2007)<b><span><\/p>\n<p><\/span><\/b><\/span><\/p>\n<p class=\"MsoNormal\"><b><span>Details<span> <\/p>\n<p><\/span><\/span><\/b><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\"><span>The following steps detail out how to implement the UI and behavior pictured in the images above&hellip;<\/span><b><span><\/p>\n<p><\/span><\/b><\/font><\/font><\/p>\n<p class=\"MsoNormal\"><font size=\"3\"><font face=\"Calibri\"><span>The first step is to create a new VB Silverlight project<\/span><span><\/p>\n<p><\/span><\/font><\/font><\/p>\n<p class=\"MsoListParagraph\"><span><span>0.<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span>Create a new VB Silverlight project by selecting <b>File<\/b> -&gt; <b>New<\/b> -&gt; <b>Project&hellip;,<\/b> and then selecting <b>Visual Basic<\/b> in the Project types pane and\n<b>Silverlight Project<\/b> in the Templates pane<\/p>\n<p><\/span><\/p>\n<p class=\"MsoListParagraph\"><span>The next step involves tweaking JavaScript a bit. To handle repositioning of elements, we first need to get a reference to the Silverlight control, so we can get its size. We then need to send the size information back to the .NET code. What follows are the changes that are required in the JavaScript code to enable this functionality<\/p>\n<p><\/span><\/p>\n<p class=\"MsoListParagraph\"><span><span>1.<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span>Open TestPage.html.js by selecting <b>File<\/b> -&gt; <b>Open<\/b> -&gt; <b>File&hellip;<\/b>, and then opening <b>TestPage.html.js <\/b>from your newly created Silverlight Project directory<\/p>\n<p><\/span><\/p>\n<p class=\"MsoListParagraph\"><span><span>2.<span>&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/span><\/span><span>Modify <b>TestPage.html.js<\/b> as follows (the code in gray is the original code, and the red underlined code identifies what you need to modify in the file while the full color code is what you need to add to the file)<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span>\/\/ JScript source code<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><\/p>\n<p>&nbsp;<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span>\/\/contains calls to silverlight.js, example below loads Page.xaml<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span>function createSilverlight()<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span>{<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp; <\/span>Silverlight.createObjectEx({<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>source: &#8220;Page.xaml&#8221;,<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>parentElement: document.getElementById(&#8220;SilverlightControlHost&#8221;),<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>id: &#8220;SilverlightControl&#8221;,<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>properties: {<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>width: &#8220;100%&#8221;,<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>height: &#8220;100%&#8221;,<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>version: &#8220;1.1&#8221;,<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><u><span>isWindowless: &#8220;true&#8221;,<\/p>\n<p><\/span><\/u><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><u>background: &#8220;#00000000&#8221;,<\/p>\n<p><\/u><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>enableHtmlAccess: &#8220;true&#8221;<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>},<\/span><span> <\/span><span><\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span>events: {<\/span><span> <u><span>onLoad: OnLoaded<\/span><\/u> <span>}<\/span><\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>});<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>&nbsp;&nbsp; <\/span><\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>\/\/ Give keyboard focus to the Silverlight control by default<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp; <\/span><\/span><u><span>function OnLoaded(sender, args)<\/span><\/u><span> <span>{<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>var silverlightControl = document.getElementById(&#8216;SilverlightControl&#8217;);<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>if (silverlightControl)<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>silverlightControl.focus();<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>\/\/ Onload call the method that sends the SL control size to the .NET code<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span>CallScriptable();<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>}<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp; <\/span><span>\/\/ Send the SL control size to the .NET code<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp; <\/span><span>function<\/span> CallScriptable() {<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>\/\/ Get the SL control instance<\/p>\n<p><\/span><\/span><\/p>\n<p class=\"MsoNormal\"><span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <\/span><span>var<\/span> silverlightControl = document.getElementById(<span>&#8216;SilverlightControl&#8217;<\/span>);<\/p>\n<p><\/span><\/p>\n<p class=\"MsoNormal\"><span><\/span><\/p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>This is my first post on the VB blog! I&rsquo;m a designer on the team with a background in visual and interaction design, and I also have some .NET coding experience. I plan to start blogging on the VB blog on a regular basis, and my goal is to share some of my thoughts on [&hellip;]<\/p>\n","protected":false},"author":260,"featured_media":8818,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[192,195],"tags":[50,137],"class_list":["post-5283","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-featured","category-visual-basic","tag-corrina-barber","tag-silverlight"],"acf":[],"blog_post_summary":"<p>This is my first post on the VB blog! I&rsquo;m a designer on the team with a background in visual and interaction design, and I also have some .NET coding experience. I plan to start blogging on the VB blog on a regular basis, and my goal is to share some of my thoughts on [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts\/5283","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/users\/260"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/comments?post=5283"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/posts\/5283\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/media\/8818"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/media?parent=5283"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/categories?post=5283"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/vbteam\/wp-json\/wp\/v2\/tags?post=5283"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}