<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Okoboji: a lake, a mythical university, Kevin Moore's blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/okoboji/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/okoboji/feed.xml</link>
    <description>Kevin Moore, Program Manager, Windows Presentation Foundation (WPF), WinFX</description>
    <lastBuildDate>Wed, 17 Apr 2019 04:02:09 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Kevin's WPF Bag-o-Tricks</title>
      <link>https://docs.microsoft.com/archive/blogs/okoboji/kevins-wpf-bag-o-tricks</link>
      <pubDate>Mon, 25 Jun 2007 19:26:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/okoboji/2007/06/25/kevins-wpf-bag-o-tricks/</guid>
      <description><![CDATA[
This page no longer exists...here.
Go here (http://j832.com/bagotricks/) instead.
:-)&nbsp;
]]></description>
      <content:encoded><![CDATA[
<p>This page no longer exists...here.</p>
<p>Go here (<a href="http://j832.com/bagotricks/" mce_href="http://j832.com/bagotricks/">http://j832.com/bagotricks/</a>) instead.</p>
<p>:-)&nbsp;</p>
]]></content:encoded>
    </item>
    <item>
      <title>Update your bookmarks and blog readers--I'm moving</title>
      <link>https://docs.microsoft.com/archive/blogs/okoboji/update-your-bookmarks-and-blog-readers-im-moving</link>
      <pubDate>Sat, 28 Apr 2007 21:37:02 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/okoboji/2007/04/28/update-your-bookmarks-and-blog-readers-im-moving/</guid>
      <description><![CDATA[Lake Okoboji is freezing over indefinitely. In an effort to unify all the random stuff I do, I've...]]></description>
      <content:encoded><![CDATA[<p>Lake <a href="http://blogs.msdn.com/okoboji">Okoboji</a> is freezing over indefinitely.</p> <p>In an effort to unify all the random stuff I do, I've rolled my WPF blogging under my (vanity) domain.</p> <p>Point your favorites and feed&nbsp;aggregators to <a href="http://work.j832.com/">work.j832.com</a>.</p> <p>See you on the other side!</p>]]></content:encoded>
    </item>
    <item>
      <title>Updates to 2 must-have applications! Both managed code! Both free (as in beer)!</title>
      <link>https://docs.microsoft.com/archive/blogs/okoboji/updates-to-2-must-have-applications-both-managed-code-both-free-as-in-beer</link>
      <pubDate>Wed, 21 Feb 2007 19:27:12 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/okoboji/2007/02/21/updates-to-2-must-have-applications-both-managed-code-both-free-as-in-beer/</guid>
      <description><![CDATA[Paint.NET ROCKS! I can't imagine ever paying for Photoshop. Now in version 3.0. The killer new...]]></description>
      <content:encoded><![CDATA[<p><a href="http://www.getpaint.net/"><strong>Paint.NET</strong></a><strong> ROCKS!</strong></p> <p>I can't imagine ever paying for Photoshop. Now in version 3.0. The killer new feature: MDI. Awesome.</p> <p><strong><a href="http://www.aisto.com/roeder/dotnet/">Reflector .NET</a> ROCKS!</strong></p> <p>(Via <a href="http://www.simplegeek.com/PermaLink.aspx/fd8682b4-10fe-465b-af1c-883af8f3d445">Chris</a>, Via <a href="http://www.sellsbrothers.com/news/showTopic.aspx?ixTopic=2082">Chris</a>.) Take a look at the <a href="http://www.aisto.com/roeder/paper/reflector5.ppt">PowerPoint deck</a> for full details of v5.0. The killer new feature: Full C# v3.0 support. Awesome.</p>]]></content:encoded>
    </item>
    <item>
      <title>Windows Vista: What Should WebSite Hosters Do?</title>
      <link>https://docs.microsoft.com/archive/blogs/okoboji/windows-vista-what-should-website-hosters-do</link>
      <pubDate>Wed, 21 Feb 2007 13:13:04 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/okoboji/2007/02/21/windows-vista-what-should-website-hosters-do/</guid>
      <description><![CDATA[Check out Rob's blog on instructions for ISP's (or anyone that runs a server) on how to host WPF...]]></description>
      <content:encoded><![CDATA[<p>Check out <a href="http://rrelyea.spaces.live.com/">Rob's blog</a> on <a href="http://rrelyea.spaces.live.com/blog/cns!167AD7A5AB58D5FE!1661.entry">instructions for ISP's</a> (or anyone that runs a server) on how to host WPF content (XBaps, XPS docs, etc).</p> <p>If you're a WPF fan, link to this post. T'would be good to&nbsp;build awareness on this topic.</p>]]></content:encoded>
    </item>
    <item>
      <title>On ItemTemplate, ContentTemplate, DataTemplate</title>
      <link>https://docs.microsoft.com/archive/blogs/okoboji/on-itemtemplate-contenttemplate-datatemplate</link>
      <pubDate>Tue, 13 Feb 2007 02:33:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/okoboji/2007/02/13/on-itemtemplate-contenttemplate-datatemplate/</guid>
      <description><![CDATA[A recent forum post asked how one could build out ItemsControl-like functionality in a custom...]]></description>
      <content:encoded><![CDATA[<p>A <a href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1190413&amp;SiteID=1" mce_href="http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1190413&amp;SiteID=1">recent forum post</a> asked how one could build out ItemsControl-like functionality in a custom control.</p> <p>Let me start from the basics.</p> <p>ContentPresenter presents content. If you give it a UIElement (Grid, Button, Border) it will just display it. Easy enough. If you give it "data" (Customer, Order, Int32) it will display it using a DataTemplate.</p> <p>DataTemplate is to data as ControlTemplate is to Control. It lets one define a tree of visuals that represent a given DataContext.</p> <p>Robby and I <a href="http://blogs.msdn.com/okoboji/archive/2006/02/02/523681.aspx" mce_href="http://blogs.msdn.com/okoboji/archive/2006/02/02/523681.aspx">chatted about this</a> just over a year ago.</p> <p>ContentPresenter is the "thing" that does the work to realize the DataTemplate. It has the magic.</p> <p>One can give ContentPresenter a DataTemplate in two ways:</p> <ol> <li>Set the ContentTemplate property. This is typeof(DataTemplate)  </li><li>Set the ContentTemplateSelector. This is typeof(DataTemplateSelector)</li></ol> <p>The selector is used if the ContentTemplate is null. In the end, it just returns a DataTemplate.</p> <p>With me so far?</p> <p>Now ContentPresenter has no "chrome" to speak of. If you want to show content with some interactive chrome, use a ContentControl. This way you can show some non-data state (like selection, focus) and have non-data&nbsp;behavior (like checking or clicking). This is what Button, CheckBox, and ListBoxItem do.</p> <p>All of these controls do very little. The own some purpose-specific state and rely on a ContentPresenter in their control template to do the work of displaying content. ContentControl also has a ContentTemplate property and ContentTemplateSelector property (as well as, you guessed it, a Content property). These are never really used directly by the Control, they are simply used to alias values down to the templated ContentPresenter.</p> <p>Moving to ItemsControl (IC), we have a similar story.</p> <p>IC has two analogous properties:</p> <ol> <li>ItemTemplate [typeof(DataTemplate)]  </li><li>ItemTemplateSelector [typeof(DataTemplateSelector)]</li></ol> <p>Now&nbsp;IC does a very specific trick. It takes data items from a list, creates wrappers (or containers) for each data item, and places them in a specified panel.</p> <p><b>GetContainerForItemOverride</b> is a virtual method on IC that is used to generate containers--ListBox creates ListBoxItem, TreeView creates TreeViewItem, etc.</p> <p><b>PrepareContainerForItemOverride</b> is another virtual method on IC. This is the method that marries the generated container to the corresponding data item. In the process, it sets up the container with the right properties from the parent IC. It sets the ContentTemplate of the container to be the ItemTemplate of the IC. Same with ItemTemplateSelector. When the container is a ContentControl, these are once again proxied to an underlying ContentPresenter.</p> <p>The question on the forum asks how this can be accomplished in a custom control. Well, if one doesn't want to use IC, one can accomplish the same set of things. Create code to generate either a ContentPresenter or ContentControl for each data item. Expose Template/TemplateSelector properties on your parent control. When you generate child items, make sure you alias the properties from parent to child. That's about it.</p> <p>I do this trick in the <b>Graph</b> control as part of the <a href="http://j832.com/bagotricks/" mce_href="http://j832.com/bagotricks/">Bag-o-tricks</a>.</p> <p>I know that the ItemTemplate, ContentTemplate, DataTemplate naming thing can be confusing. Remember, at the end of the day, it all boils down to a ContentPresenter + Template to display data is a cool way.</p> <p>Hope this answers the question and sheds some light on the workings of our more complicated controls.</p> <p>Happy hacking!</p>]]></content:encoded>
    </item>
    <item>
      <title>Programmer Don't Like to Code</title>
      <link>https://docs.microsoft.com/archive/blogs/okoboji/programmer-dont-like-to-code</link>
      <pubDate>Mon, 05 Feb 2007 23:13:30 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/okoboji/2007/02/05/programmer-dont-like-to-code/</guid>
      <description><![CDATA[Forgot what link brought me here, but I was quite impressed with the analysis. Programmer's Don't...]]></description>
      <content:encoded><![CDATA[<p>Forgot what link brought me here, but I was quite impressed with the analysis.</p> <p align="center"><a href="http://rentzsch.com/notes/programmersDontLikeToCode">Programmer's Don't Like to Code</a></p> <blockquote> <p>...they <strong><em>like problem solving</em></strong>.</p> <p>If programmers liked to code, we’d all be writing in machine language to this day. You can write that stuff all day and get precious little of the real problem solved.  <p>If programmers liked to code, they wouldn’t value a language by its libraries. If programmers liked to code, every last one of us would be overjoyed to write our own HTTP client.</p></blockquote> <p>Interesting stuff...</p>]]></content:encoded>
    </item>
    <item>
      <title>Updated Bag-o-Tricks for January</title>
      <link>https://docs.microsoft.com/archive/blogs/okoboji/updated-bag-o-tricks-for-january</link>
      <pubDate>Thu, 11 Jan 2007 19:10:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/okoboji/2007/01/11/updated-bag-o-tricks-for-january/</guid>
      <description><![CDATA[In celebration of the availability of the January CTP of VS "Orcas", I've updated the bag-o-tricks....]]></description>
      <content:encoded><![CDATA[<p>In celebration of the availability of the <a href="http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx" mce_href="http://msdn2.microsoft.com/en-us/vstudio/aa700831.aspx">January CTP of VS "Orcas"</a>, I've updated the bag-o-tricks.</p> <p>(Actually, it's because I'm stuck at home, but I wanted an excuse to mention the VS CTP.)</p> <p>Download here: <a href="http://j832.com/bagotricks/" title="http://j832.com/bagotricks/" mce_href="http://j832.com/bagotricks/">http://j832.com/bagotricks/</a></p> <p>Have fun!</p> <p><b><font size="3">New: Zap Scroller</font></b></p> <p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/okoboji/WindowsLiveWriter/UpdatedBagoTricksforJanuary_E35F/20070111Zap4.png" original-url="http://blogs.msdn.com/blogfiles/okoboji/WindowsLiveWriter/UpdatedBagoTricksforJanuary_E35F/20070111Zap4.png" mce_src="http://blogs.msdn.com/blogfiles/okoboji/WindowsLiveWriter/UpdatedBagoTricksforJanuary_E35F/20070111Zap4.png" width="819" height="489"></p> <p>(Cleaned up my <a href="http://blogs.msdn.com/okoboji/archive/2006/12/24/a-super-rough-christmas-present.aspx" mce_href="http://blogs.msdn.com/okoboji/archive/2006/12/24/a-super-rough-christmas-present.aspx">Christmas present</a> for public consumption.)</p> <p>I've seen this trick done in flash quite a bit. I wanted to play with animating the "current item" in an ItemsControl. I also wanted to model a method for exposing a preview of all of the items in an ItemsControl.</p> <p>I steal and extend some of the command tricks I used it "List Pager". Let me know what you think.</p> <p><b><font size="3">Updated: Graph</font></b></p> <p><img src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/okoboji/WindowsLiveWriter/UpdatedBagoTricksforJanuary_E35F/20070111Graph4.png" original-url="http://blogs.msdn.com/blogfiles/okoboji/WindowsLiveWriter/UpdatedBagoTricksforJanuary_E35F/20070111Graph4.png" mce_src="http://blogs.msdn.com/blogfiles/okoboji/WindowsLiveWriter/UpdatedBagoTricksforJanuary_E35F/20070111Graph4.png" width="819" height="489"></p> <p>A couple of bug fixes. When you set the center node to null, I clear out the lines right away. New nodes come in randomly instead of at the same spot.</p> <p><i>This post brought to you by: </i><a href="http://windowslivewriter.spaces.live.com/" mce_href="http://windowslivewriter.spaces.live.com/"><i>Windows Live Writer</i></a><i>, </i><a href="http://www.getpaint.net/index2.html" mce_href="http://www.getpaint.net/index2.html"><i>Paint .NET</i></a><i>, and </i><a href="http://www.aisto.com/roeder/dotnet/" mce_href="http://www.aisto.com/roeder/dotnet/"><i>.NET Reflector</i></a></p>]]></content:encoded>
    </item>
    <item>
      <title>A (super rough) Christmas Present</title>
      <link>https://docs.microsoft.com/archive/blogs/okoboji/a-super-rough-christmas-present</link>
      <pubDate>Sun, 24 Dec 2006 04:25:00 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/okoboji/2006/12/24/a-super-rough-christmas-present/</guid>
      <description><![CDATA[It's 1:22 AM. I think I'm getting sick. I'm flying out for California tomorrow. Haven't packed yet....]]></description>
      <content:encoded><![CDATA[<p>It's 1:22 AM. I think I'm getting sick. I'm flying out for California tomorrow. Haven't packed yet.</p> <p>And I'm coding.</p> <p>Some ideas you just have to get working before you can put them down.</p> <p>In no way is this beatiful code. The end-to-end is pretty interesting, though.</p> <p>When I'm back from Cali, I'll clean it up and put it in the Bag-o-Tricks.</p> <p>In the mean time, have fun playing with <strong><a href="http://blogs.msdn.com/okoboji/attachment/1356328.ashx">ZapScroller</a></strong>.</p> <p>Playing with control templates + commands + custom animation.</p> <p>Build. Run. Let me know if you think I'm crazy.</p> <p>In the mean time, have a safe New Year.</p> <p>See you on the other side!</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Components.PostAttachments/00/01/35/63/28/ZapScrollViewer.zip" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-components-postattachments/00-01-35-63-28/ZapScrollViewer.zip">ZapScrollViewer.zip</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Chat with the WPF team tomorrow</title>
      <link>https://docs.microsoft.com/archive/blogs/okoboji/chat-with-the-wpf-team-tomorrow</link>
      <pubDate>Wed, 20 Dec 2006 19:57:07 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/okoboji/2006/12/20/chat-with-the-wpf-team-tomorrow/</guid>
      <description><![CDATA[Our holiday gift to you: listening. Tomorrow (Dec 21) 12:30 - 1:30 PM Pacific Time. Details:...]]></description>
      <content:encoded><![CDATA[<p>Our holiday gift to you: listening. Tomorrow (Dec 21) 12:30 - 1:30 PM Pacific Time.</p> <p>Details: <a title="http://msdn.microsoft.com/chats/" href="http://msdn.microsoft.com/chats/">http://msdn.microsoft.com/chats/</a></p> <p><a title="Add to Calendar" href="http://msdn.microsoft.com/chats/outlook_reminders/06_1221_MSDN_WPF.ics">Add to Calendar</a></p> <p>(As always, <a href="http://blogs.msdn.com/tims/">Tim</a> is <a href="http://blogs.msdn.com/tims/archive/2006/12/14/wpf-technical-chat-thursday-december-20th.aspx">much more thorough</a> than&nbsp;I.)</p>]]></content:encoded>
    </item>
    <item>
      <title>Expression Web - beautiful</title>
      <link>https://docs.microsoft.com/archive/blogs/okoboji/expression-web-beautiful</link>
      <pubDate>Tue, 19 Dec 2006 01:35:02 GMT</pubDate>
      <dc:creator><![CDATA[MSDN Archive]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/okoboji/2006/12/19/expression-web-beautiful/</guid>
      <description><![CDATA[I'm working on an end-of-year letter as web site. (Yeah, I'm a geek. I have way more email addresses...]]></description>
      <content:encoded><![CDATA[<p>I'm working on an end-of-year letter as web site. (Yeah, I'm a geek. I have way more email addresses for friends than mailing addresses.)</p> <p>Anyway, I've been bought into CSS for a while. The start of my projcet aligned nicely with the shipment of <a href="http://www.microsoft.com/products/expression/en/web_designer/default.mspx">Expression Web</a>, so I've been giving it a go.</p> <p>Amazing. The CSS experience is really nice. Managing a site via FTP, dealing with syncing, etc. all very cool.</p> <p>Give it a test run. You'll be happy.</p>]]></content:encoded>
    </item>
  </channel>
</rss>