<?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>Building Better Software - One Line At A Time</title><link>http://blogs.msdn.com/b/permanenttan/</link><description /><dc:language>en</dc:language><generator>Telligent Evolution Platform Developer Build (Build: 5.6.50428.7875)</generator><item><title>Resizing the Select Branches “dialog”/semi-modal Panel in VS 2010 Branch Visualization</title><link>http://blogs.msdn.com/b/permanenttan/archive/2010/07/09/resizing-the-select-branches-dialog-semi-modal-panel-in-vs-2010-branch-visualization.aspx</link><pubDate>Fri, 09 Jul 2010 18:52:34 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10036535</guid><dc:creator>PermanentTan</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/permanenttan/rsscomments.aspx?WeblogPostID=10036535</wfw:commentRss><comments>http://blogs.msdn.com/b/permanenttan/archive/2010/07/09/resizing-the-select-branches-dialog-semi-modal-panel-in-vs-2010-branch-visualization.aspx#comments</comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;One of the few annoying things about the Select Branches panel in Branch Visualization is that it looks like a modal dialog that cannot be moved or resized. We are going to address this in V.Next!&amp;#160; :)&amp;#160; Though not resizable, the panel can be “maximized” to fill the container document window to gain more space. Click the maximize button near the top right corner. While maximized, resizing the document window (by resizing VS, for example) also resizes the Select Branch panel. This technique gives you more screen real estate to work with the branch tree, list, and mini view.&lt;/p&gt;  &lt;p&gt;Enjoy.&lt;/p&gt;  &lt;p&gt;-Tan&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-59-85-metablogapi/6562.image_5F00_54036004.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-59-85-metablogapi/0207.image_5F00_thumb_5F00_67B04998.png" width="542" height="243" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10036535" width="1" height="1"&gt;</description></item><item><title>Shortcut Keys for VS2010 Branch Visualization</title><link>http://blogs.msdn.com/b/permanenttan/archive/2010/07/09/shortcut-keys-for-vs2010-branch-visualization.aspx</link><pubDate>Fri, 09 Jul 2010 18:37:55 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:10036532</guid><dc:creator>PermanentTan</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/permanenttan/rsscomments.aspx?WeblogPostID=10036532</wfw:commentRss><comments>http://blogs.msdn.com/b/permanenttan/archive/2010/07/09/shortcut-keys-for-vs2010-branch-visualization.aspx#comments</comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;There are a few shortcut keys that can quite useful inside a branch hierarchy or tracking changes visualization.&lt;/p&gt;  &lt;p&gt;In a branch hierarchy visualization, pressing the Insert while on a node with children (+ visible) drops down the child branch selector. Pressing Shift + Insert shows the general branch selection panel. Pressing Delete (x visible) removes the selected branch node. Pressing Home moves the selection to the branch node whose hierarchy is being viewed.&lt;/p&gt;  &lt;p&gt;In the tracking changeset visualization, pressing Alt+L switches to the timeline view and pressing Alt+I switches to the hierarchy view. Pressing Home moves the selection to the starting branch (node or bar depending on the view) containing the changeset being tracked.&lt;/p&gt;  &lt;p&gt;In both visualizations, the arrow keys move the branch selection. Pressing Control+C copies the visualization to the clipboard.&lt;/p&gt;  &lt;p&gt;Enjoy.&lt;/p&gt;  &lt;p&gt;-Tan&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=10036532" width="1" height="1"&gt;</description></item><item><title>Go to Changeset from Team Explorer</title><link>http://blogs.msdn.com/b/permanenttan/archive/2009/12/14/go-to-changeset-from-team-explorer.aspx</link><pubDate>Mon, 14 Dec 2009 14:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9936513</guid><dc:creator>PermanentTan</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/permanenttan/rsscomments.aspx?WeblogPostID=9936513</wfw:commentRss><comments>http://blogs.msdn.com/b/permanenttan/archive/2009/12/14/go-to-changeset-from-team-explorer.aspx#comments</comments><description>&lt;P&gt;In a previous posting, I mentioned that Ctrl+G in VS2010 brings up the new Go to Changeset dialog from the Source Control Explorer. In RTM, Ctrl+G from Team Explorer will also do the same.&lt;/P&gt;
&lt;P&gt;Furthermore, we've added another entry for tracking a changeset - directly from the Go to Changeset dialog. Just enter a changeset number and click Track Changeset.&lt;/P&gt;
&lt;P&gt;Enjoy.&lt;/P&gt;
&lt;P&gt;-Tan&lt;/P&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9936513" width="1" height="1"&gt;</description></item><item><title>How to convert a Visual Studio 2010 Branch back to a Folder</title><link>http://blogs.msdn.com/b/permanenttan/archive/2009/11/20/how-to-convert-a-visual-studio-2010-branch-back-to-a-folder.aspx</link><pubDate>Fri, 20 Nov 2009 14:59:19 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9926227</guid><dc:creator>PermanentTan</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/permanenttan/rsscomments.aspx?WeblogPostID=9926227</wfw:commentRss><comments>http://blogs.msdn.com/b/permanenttan/archive/2009/11/20/how-to-convert-a-visual-studio-2010-branch-back-to-a-folder.aspx#comments</comments><description>&lt;p&gt;Visual Studio 2010 extends the concept of a folder as a “first-class” branch and introduces the tools to convert folders to first-class branches to enable exciting new Branch Visualization and Tracking Changes features. For reference, please see &lt;a title="http://blogs.msdn.com/hakane/archive/2009/05/19/enable-branch-visualization-in-upgraded-team-projects-tfs-2010-beta1.aspx" href="http://blogs.msdn.com/hakane/archive/2009/05/19/enable-branch-visualization-in-upgraded-team-projects-tfs-2010-beta1.aspx"&gt;http://blogs.msdn.com/hakane/archive/2009/05/19/enable-branch-visualization-in-upgraded-team-projects-tfs-2010-beta1.aspx&lt;/a&gt; and &lt;a title="http://msdn.microsoft.com/en-us/library/ms181423(VS.100).aspx" href="http://msdn.microsoft.com/en-us/library/ms181423(VS.100).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms181423(VS.100).aspx&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Source Control Explorer context menu and toolbar have the button to convert a folder to a branch but not one for converting a branch back to a folder. You can find that functionality from the main menu under File &amp;gt; Source Control &amp;gt; Branching and Merging. Note that Reparent is also available there.&lt;/p&gt;  &lt;p&gt;Enjoy.&lt;/p&gt;  &lt;p&gt;-Tan&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9926227" width="1" height="1"&gt;</description></item><item><title>Go to Changeset for Visual Studio 2010</title><link>http://blogs.msdn.com/b/permanenttan/archive/2009/11/20/go-to-changeset-for-visual-studio-2010.aspx</link><pubDate>Fri, 20 Nov 2009 13:42:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9926187</guid><dc:creator>PermanentTan</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/permanenttan/rsscomments.aspx?WeblogPostID=9926187</wfw:commentRss><comments>http://blogs.msdn.com/b/permanenttan/archive/2009/11/20/go-to-changeset-for-visual-studio-2010.aspx#comments</comments><description>&lt;p&gt;In previous versions of Visual Studio, hitting Ctrl+G from Source Control Explorer brings up the Find Changeset dialog. In VS 2010, Ctrl+G brings up the new Go to Changeset dialog which lets you quickly enter a changeset number and get the changeset details.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/permanenttan/WindowsLiveWriter/GotoChangesetforVisualStudio2010_7A80/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/permanenttan/WindowsLiveWriter/GotoChangesetforVisualStudio2010_7A80/image_thumb.png" width="244" height="100" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;In this dialog, you can also hit Ctrl+G again to bring up the Find Changeset dialog. So effectively from Source Control Explorer, one Ctrl+G for “Go to Changeset” and twice for “Find Changeset”.&lt;/p&gt;  &lt;p&gt;Enjoy.&lt;/p&gt;  &lt;p&gt;-Tan&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9926187" width="1" height="1"&gt;</description></item><item><title>WPF TreeView Memory Consumption and Performance</title><link>http://blogs.msdn.com/b/permanenttan/archive/2009/11/20/wpf-treeview-memory-consumption-and-performance.aspx</link><pubDate>Fri, 20 Nov 2009 13:29:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9926178</guid><dc:creator>PermanentTan</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/permanenttan/rsscomments.aspx?WeblogPostID=9926178</wfw:commentRss><comments>http://blogs.msdn.com/b/permanenttan/archive/2009/11/20/wpf-treeview-memory-consumption-and-performance.aspx#comments</comments><description>&lt;p&gt;One very simple thing you can do that can significantly reduce the memory consumption and drastically improve performance of a WPF TreeView is to set the following two properties. In XAML, you would do:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;lt;TreeView x:Name=”myTreeView”&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&lt;strong&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; VirtualizingStackPanel.IsVirtualizing=&amp;quot;True&amp;quot;&lt;/em&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&lt;em&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;VirtualizingStackPanel.VirtualizationMode=&amp;quot;Recycling&amp;quot;&lt;/strong&gt;&lt;/em&gt; /&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;In a simple test of a data-bound TreeView containing just 5000 items, turning on stack panel virtualization reduces the memory overhead from over 110MB to about 2MB. Additionally, the control also gets a performance boost in items’ expand/collapse, selection, scrolling, and general navigation.&lt;/p&gt;  &lt;p&gt;The WPF ListView also support these properties but, unlike the TreeView, its VirtualizingStackPanel.IsVirtualizing is already default to True.&lt;/p&gt;  &lt;p&gt;Enjoy.&lt;/p&gt;  &lt;p&gt;-Tan&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9926178" width="1" height="1"&gt;</description></item><item><title>Data Bind Using Only Code Behind</title><link>http://blogs.msdn.com/b/permanenttan/archive/2009/06/21/data-bind-using-only-code-behind.aspx</link><pubDate>Mon, 22 Jun 2009 00:54:04 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9796330</guid><dc:creator>PermanentTan</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/permanenttan/rsscomments.aspx?WeblogPostID=9796330</wfw:commentRss><comments>http://blogs.msdn.com/b/permanenttan/archive/2009/06/21/data-bind-using-only-code-behind.aspx#comments</comments><description>&lt;p&gt;We are all familiar with the use of WPF Binding in XAML. For example, the following lines bind the caption of a Button (variableCaptionButton) to the text of a TextBox (sourceText).&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;TextBox x:Name=&amp;quot;sourceText&amp;quot; Grid.Row=&amp;quot;0&amp;quot; /&amp;gt;      &lt;br /&gt;&amp;lt;Button x:Name=&amp;quot;variableCaptionButton&amp;quot; Grid.Row=&amp;quot;1&amp;quot; Content=&amp;quot;{Binding ElementName=sourceText, Path=Text}&amp;quot;/&amp;gt;&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Have there been times when you need to dynamically build or add UI elements from code behind and have a need to also create bindings among those dynamically created UI elements? &lt;/p&gt;  &lt;p&gt;Creating binding using only code behind is easy.&lt;/p&gt;  &lt;p&gt;Here is the code behind to accomplish the same binding shown in the above XAML code.&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;Binding binding = new Binding(&amp;quot;Text&amp;quot;);      &lt;br /&gt;binding.Source = sourceText;       &lt;br /&gt;variableCaptionButton.SetBinding(Button.ContentProperty, binding);&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;The Binding instance defines the data source (the “sourceText” TextBox), and which data source property (the “Text” property). SetBinding() connects a binding source to the receiving property on the target element (“variableCaptionButton” button).&lt;/p&gt;  &lt;p&gt;Additionally, you can also define a value converter and parameter via the properties, Binding.Converter and Binding.ConverterParameter, respectively.&lt;/p&gt;  &lt;p&gt;That’s it!&lt;/p&gt;  &lt;p&gt;-Tan&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9796330" width="1" height="1"&gt;</description></item><item><title>Array as a WPF ConverterParameter</title><link>http://blogs.msdn.com/b/permanenttan/archive/2009/06/19/array-as-a-wpf-converterparameter.aspx</link><pubDate>Fri, 19 Jun 2009 07:31:09 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9779136</guid><dc:creator>PermanentTan</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/permanenttan/rsscomments.aspx?WeblogPostID=9779136</wfw:commentRss><comments>http://blogs.msdn.com/b/permanenttan/archive/2009/06/19/array-as-a-wpf-converterparameter.aspx#comments</comments><description>&lt;p&gt;A WPF value converter accepts a value and an optional parameter. The parameter can be specified in the XAML binding as a string like the following:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;TextBlock Background=”{Binding Path=myElement, Converter={StatisResource MyConverter}, ConverterParameter=myParameterText}” /&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Instead of one string, what if you want to pass an array of strings as a converter parameter? What about an array of brushes?&lt;/p&gt;  &lt;p&gt;The trick is to specify the binding in its own XAML tag and use Binding.ConverterParameter and Array. Here is an example of how to pass an array of Strings and an array of Brushes into a value converter. Note the uses of Binding, Binding.ConverterParameter, and Array.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;lt;Window x:Class=&amp;quot;ConverterParameters.Window1&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xmlns=&amp;quot;&lt;/font&gt;&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;"&gt;&lt;font face="Courier New"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/font&gt;&lt;/a&gt;     &lt;br /&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xmlns:x=&amp;quot;&lt;/font&gt;&lt;a href="http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;"&gt;&lt;font face="Courier New"&gt;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/font&gt;&lt;/a&gt;     &lt;br /&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xmlns:mscor=&amp;quot;clr-namespace:System;assembly=mscorlib&amp;quot;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; xmlns:local=&amp;quot;clr-namespace:ConverterParameters&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; WindowStartupLocation=&amp;quot;CenterScreen&amp;quot;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Title=&amp;quot;Array as ConverterParameter&amp;quot; Height=&amp;quot;100&amp;quot; Width=&amp;quot;300&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Window.Resources&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;local:IntToStringMux x:Key=&amp;quot;IntToStringMux&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;local:IntToBrushMux x:Key=&amp;quot;IntToBrushMux&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Window.Resources&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Grid&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Grid.RowDefinitions&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;RowDefinition Height=&amp;quot;*&amp;quot; /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;RowDefinition Height=&amp;quot;Auto&amp;quot; /&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Grid.RowDefinitions&amp;gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;TextBlock Grid.Row=&amp;quot;0&amp;quot; HorizontalAlignment=&amp;quot;Stretch&amp;quot; VerticalAlignment=&amp;quot;Center&amp;quot; TextAlignment=&amp;quot;Center&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;TextBlock.Text&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Binding ElementName=&amp;quot;mySelector&amp;quot; Path=&amp;quot;SelectedIndex&amp;quot; Converter=&amp;quot;{StaticResource IntToStringMux}&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Binding.ConverterParameter&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;x:Array Type=&amp;quot;mscor:String&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;mscor:String&amp;gt;A selected&amp;lt;/mscor:String&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;mscor:String&amp;gt;B selected&amp;lt;/mscor:String&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;mscor:String&amp;gt;C selected&amp;lt;/mscor:String&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;mscor:String&amp;gt;D selected&amp;lt;/mscor:String&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/x:Array&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Binding.ConverterParameter&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Binding&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/TextBlock.Text&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;TextBlock.Background&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Binding ElementName=&amp;quot;mySelector&amp;quot; Path=&amp;quot;SelectedIndex&amp;quot; Converter=&amp;quot;{StaticResource IntToBrushMux}&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;Binding.ConverterParameter&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;x:Array Type=&amp;quot;Brush&amp;quot;&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;SolidColorBrush Color=&amp;quot;LawnGreen&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;SolidColorBrush Color=&amp;quot;LightSkyBlue&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;SolidColorBrush Color=&amp;quot;LightCoral&amp;quot;/&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/x:Array&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Binding.ConverterParameter&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Binding&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/TextBlock.Background&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/TextBlock&amp;gt; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ComboBox x:Name=&amp;quot;mySelector&amp;quot; Grid.Row=&amp;quot;1&amp;quot; SelectedIndex=&amp;quot;0&amp;quot;&amp;gt;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ComboBox.Items&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ComboBoxItem&amp;gt;Item A&amp;lt;/ComboBoxItem&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ComboBoxItem&amp;gt;Item B&amp;lt;/ComboBoxItem&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ComboBoxItem&amp;gt;Item C&amp;lt;/ComboBoxItem&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;ComboBoxItem&amp;gt;Item D&amp;lt;/ComboBoxItem&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/ComboBox.Items&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/ComboBox&amp;gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/Grid&amp;gt;       &lt;br /&gt;&amp;lt;/Window&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For completeness, the implementations for the IntToStringMux and IntToBrushMux converters are also included below.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;[ValueConversion(typeof(int), typeof(String))]      &lt;br /&gt;public class IntToStringMux : IValueConverter       &lt;br /&gt;{       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String result = String.Empty;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; int itemIndex = 0;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; String[] itemDescriptions = parameter as String[]; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (value != null &amp;amp;&amp;amp; value.GetType() == typeof(int))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; itemIndex = (int)value;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (itemDescriptions != null &amp;amp;&amp;amp; itemIndex &amp;lt; itemDescriptions.Length)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; result = itemDescriptions[itemIndex];       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return result;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; throw new NotImplementedException();       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;} &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;[ValueConversion(typeof(int), typeof(Brush))]      &lt;br /&gt;public class IntToBrushMux : IValueConverter       &lt;br /&gt;{       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Brush result = Brushes.Red;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; int itemIndex = 0;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Brush[] brushes = parameter as Brush[]; &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (value != null &amp;amp;&amp;amp; value.GetType() == typeof(int))      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; itemIndex = (int)value;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (brushes != null &amp;amp;&amp;amp; itemIndex &amp;lt; brushes.Length)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; result = brushes[itemIndex];       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; return result;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; throw new NotImplementedException();       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }       &lt;br /&gt;}&lt;/font&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;That’s it!&lt;/p&gt;  &lt;p&gt;Hope this helps. -Tan&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9779136" width="1" height="1"&gt;</description></item><item><title>Setting Initial Focus in XAML</title><link>http://blogs.msdn.com/b/permanenttan/archive/2009/06/11/setting-initial-focus-in-xaml.aspx</link><pubDate>Thu, 11 Jun 2009 16:34:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9726536</guid><dc:creator>PermanentTan</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/permanenttan/rsscomments.aspx?WeblogPostID=9726536</wfw:commentRss><comments>http://blogs.msdn.com/b/permanenttan/archive/2009/06/11/setting-initial-focus-in-xaml.aspx#comments</comments><description>&lt;p&gt;Last time we looked at a tricky problem of setting the initial focus to a specific item in a populated WPF ListView. Most of the time, however, we just want to set the initial focus to a control (like a TextBox or a Button) in our UI. There are a couple of ways to accomplish this.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Hook the Window’s Loaded event and set the focus to the desired control in the code-behind handler &lt;/li&gt;    &lt;li&gt;Use FocusManager.FocusedElement &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The second solution is easier and can all be done in XAML. For example:&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;lt;Window …&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; FocusManager.FocusedElement=&amp;quot;{Binding ElementName=myTextBox}&amp;quot;&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; …&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;TextBox x:Name=”myTextBox”/&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2" face="Courier New"&gt;&amp;lt;/Window&amp;gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;Hope this helps. -Tan&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9726536" width="1" height="1"&gt;</description></item><item><title>Setting the Initial Focus to a ListView item</title><link>http://blogs.msdn.com/b/permanenttan/archive/2009/04/29/setting-the-initial-focus-to-a-listview-item.aspx</link><pubDate>Wed, 29 Apr 2009 20:03:42 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9576088</guid><dc:creator>PermanentTan</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.msdn.com/b/permanenttan/rsscomments.aspx?WeblogPostID=9576088</wfw:commentRss><comments>http://blogs.msdn.com/b/permanenttan/archive/2009/04/29/setting-the-initial-focus-to-a-listview-item.aspx#comments</comments><description>&lt;p&gt;This blog describes the steps needed to set the initial keyboard focus to an item in a WPF ListView. The items in the list can be static or data bound. The trick is to access the ListViewItem associated with an item and then set keyboard focus to it.&lt;/p&gt;  &lt;p&gt;The following are snippets of the code behind for a dialog with a ListView named myListView and selecting and setting the initial focus to the last item in the list.&lt;/p&gt;  &lt;h2&gt;Sample Code to Populate the ListView&lt;/h2&gt;  &lt;p&gt;&lt;font face="vera"&gt;The for loop populates the list view with some sample items. Note the call to FocusAndSelectItem().&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;public Window1()   &lt;br /&gt;{    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; InitializeComponent(); &lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; // Add the items     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; int itemCount = 50;      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; for (int i = 0; i &amp;lt; itemCount; i++)      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ListViewItem item = new ListViewItem();      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; item.Content = String.Format(CultureInfo.CurrentCulture, &amp;quot;Item {0}&amp;quot;, i);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; myListView.Items.Add(item);      &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font face="Courier New"&gt;&amp;#160;&amp;#160;&amp;#160; // Focus and select the last item     &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; FocusAndSelectItem(itemCount - 1);      &lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;  &lt;h2&gt;Setting Focus to a ListViewItem&lt;/h2&gt;  &lt;p&gt;&lt;font face="vera"&gt;Because the list view and its items may not even be visible when they are created, the code cannot just access the list view item and immediately sets keyboard focus to it. We actually have to defer the focus setting by calling Dispatcher.BeginInvoke() to call back when the application has completed all its initial work and has reached the idle state. FocusAndSelectItem() does this.&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;In the actual method to set the keyboard focus TryFocusAndSelectItem(), note that we need to ensure that the list view item is visible by calling ScrollIntoView() before setting focus to it.&lt;/p&gt;  &lt;p&gt;   &lt;p&gt;&lt;font face="Courier New"&gt;/// &amp;lt;summary&amp;gt;       &lt;br /&gt;/// Request the focus to be set on the specified list view item        &lt;br /&gt;/// &amp;lt;/summary&amp;gt;        &lt;br /&gt;/// &amp;lt;param name=&amp;quot;itemIndex&amp;quot;&amp;gt;index of item to receive the initial focus&amp;lt;/param&amp;gt;        &lt;br /&gt;private void FocusAndSelectItem(int itemIndex)        &lt;br /&gt;{        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Dispatcher.BeginInvoke(new FocusAndSelectItemDelegate(TryFocusAndSelectItem), DispatcherPriority.ApplicationIdle, itemIndex);        &lt;br /&gt;} &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font face="Courier New"&gt;/// &amp;lt;summary&amp;gt;       &lt;br /&gt;/// Make sure a list view item is within the visible area of the list view        &lt;br /&gt;/// and then select and set focus to it.        &lt;br /&gt;/// &amp;lt;/summary&amp;gt;        &lt;br /&gt;/// &amp;lt;param name=&amp;quot;itemIndex&amp;quot;&amp;gt;index of item&amp;lt;/param&amp;gt;        &lt;br /&gt;private void TryFocusAndSelectItem(int itemIndex)        &lt;br /&gt;{        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ListViewItem lvi = myListView.Items.GetItemAt(itemIndex) as ListViewItem;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; if (lvi != null)        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; myListView.ScrollIntoView(lvi);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; lvi.IsSelected = true;        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Keyboard.Focus(lvi);        &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }        &lt;br /&gt;} &lt;/font&gt;&lt;/p&gt;    &lt;p&gt;&lt;font face="Courier New"&gt;private delegate void FocusAndSelectItemDelegate(int itemIndex); &lt;/font&gt;&lt;/p&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;That’s it. Hope this helps.&lt;/p&gt;  &lt;p&gt;-Tan &lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9576088" width="1" height="1"&gt;</description></item></channel></rss>