Columbia CodeCamp 2010!

Hello Everyone!

Its been a bit since my last blog post, so I thought i would give an update as to what I have been working on.

On January 30th I will be travelling to Columbia, SC to speak at the Columbia CodeCamp!  I have been working hard on a new presentation that will cover the popular topic of Touch and Multi-Touch.

In this presentation I will be going over the different ways Touch and Multi-Touch can be handled in WPF and Silverlight.  It will show things like Raw Touch, Manipulations and Gestures in both of these technologies.  I have about 7 demo’s already coded to show the different ways of accomplishing this as well as a sample on how to build a fully abstracted gesture processor where there is a common code base for both WPF and Silverlight, and it actually works! :)

After I present this for the first time at the Columbia CodeCamp I will be shortly blogging about it and posting the source code.  After that I plan on speaking on this topic somewhere in Atlanta TBD.

If you are in the area for the code camp please drop by, its free, alot of fun and there will be lots to learn.  You can register for the code camp at http://columbiacodecamp.com.

Hope to see your there!

No Comments

WPF Tips and Tricks Part 2 – Panels

Hello Everyone!

First of all, Happy Thanksgiving!  I hope everyone is having a good time and enjoying the holidays.

So it’s been awhile since I started my WPF Tips and Tricks segment and figured it was long overdue for the second installment.  In this part we will look a little bit at Panels and what we need to think about when choosing how we will lay out our forms.

So the primary tip when regarding Panels is that Panels are the “only” visuals in WPF that actually perform any sort of measurement and arrangement calculations.  What this means is that when we create a TextBox and set its Width to 100, the TextBox does not actually draw itself on the screen; the Panel it is contained in will see that it has a TextBox as a child and that its width is 100.  The Panel will then determine where the TextBox needs to be placed inside of itself and if it has enough space to include a width value of 100 and will perform the drawing.

The next tip is thinking of performance.  Lets look at some code to put this into more perspective.

I have created this example layout in 2 different panel formats:

formlayout

Here is the XAML for the first layout that uses a total of 4 StackPanels:

<StackPanel HorizontalAlignment="Left">
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
        <TextBlock Text="Field 1: " VerticalAlignment="Center"/>
        <TextBox Width="100"/>
    </StackPanel>
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
        <TextBlock Text="Field 2: " VerticalAlignment="Center"/>
        <TextBox Width="100"/>
    </StackPanel>
    <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">
        <TextBlock Text="Longer Field 3: " VerticalAlignment="Center"/>
        <TextBox Width="100"/>
    </StackPanel>
</StackPanel>

Having 4 StackPanels means we have 4 different processes to run measurement and arrangement.  The first StackPanel performs measurement and arrangement; when it gets to its first child, that StackPanel will call measurement and arrangement on its children and return up to the first StackPanel. The first StackPanel will then iterate to its second child which performs another set of measurement and arrangement calculations and so on for each StackPanel  child  – causing 4 calculations.  In more complex scenarios this will not be be very performant.

Now lets look at the second, more performant way to lay out this form:

<Grid>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="100"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>

    <TextBlock Text="Field 1: "
               Grid.Column="0"
               Grid.Row="0"
               HorizontalAlignment="Right"
               VerticalAlignment="Center"/>
    <TextBox Grid.Column="1"
             Grid.Row="0"/>

    <TextBlock Text="Field 2: "
               Grid.Column="0"
               Grid.Row="1"
               HorizontalAlignment="Right"
               VerticalAlignment="Center"/>
    <TextBox Grid.Column="1"
             Grid.Row="1"/>

    <TextBlock Text="Longer Field 3: "
               Grid.Column="0"
               Grid.Row="2"
               HorizontalAlignment="Right"
               VerticalAlignment="Center"/>
    <TextBox Grid.Column="1"
             Grid.Row="2"/>
</Grid>

With this format we have a lot more XAML to write, but we get a much more performant way to lay out the exact same visual content.  We have only one panel; this panel will perform one set of measurement and arrangement calculations.

So looking at it all: the tip here is to really think about performance when dealing with Panels.  The least amount of Panels we can use (as long as we can meet the form requirements), the more performant our WPF applications will be.

I hope you enjoy this and look forward to WPF Tips and Tricks Part 3!

2 Comments

Augusta CodeCamp

Hello everyone!

So last Saturday I took trip over to Augusta to speak at their first annual CodeCamp.  We had alot of fun and learned alot while there.  This was also my first CodeCamp presentation outside of my local area!

There was a cancellation of a spot right before my slotted spot so I stepped up and did an inpromptu adhoc session on Intro to WPF.  This was interesting since I had nothing prepared.  I tried to show as much code samples and different concepts in WPF and in the end it went very well.  A few people came up to thank me for the presentation because they knew it would be difficult being last minute but they learned alot.

After that session I did a revised version of my WPF Custom Controls presentation.  In this one we built the basics of a NumericUpDownTextBox from scratch to go over the concepts, then looked at a pre-built one I did that was alot more robust.  You can download the presentation materials here.

If you made it to the CodeCamp then I hope you enjoyed it!

Cheers

No Comments

CEDG

Hello Everyone!

So i traveled to Columbia, SC this past monday to talk at CEDG.  We had a good talk and a good time.  After the presentation we went to Longhorn for some more talks over some drinks.

I tweaked my previous Prism/MVVM topic for this presentation and I think overall it was a success.

You can download the presentation materials here.

If you came by I hope you enjoyed the presentation!

No Comments

Speaking at the Columbia Enterprise Developers Guild

Hello Everyone!

So I wanted to announce that next Monday on October 26th, I will be traveling to Columbia, SC to speak at the Columbia Enterprise Developers Guild.  You can visit their website here.

I will be speaking about how you enhance your WPF applications with the MVVM design pattern and Prism.

Here is the topic blurb.

“Model-View-ViewModel (MVVM) is a UI Design Pattern that fits well with WPF and Silverlight. It utilizes key components of XAML-based technologies like DataBinding and Commanding to provide a level of separation between visual representation, business functionality and business data design. In this topic we review the overall concept of MVVM and available design tools. We will demonstrate the use of Bindings to facilitate data interaction and business process execution in a way that allows us to take full advantage of designer/developer collaboration. We will also take a dive into Microsoft’s Composite Application Library (Prism 2) to see what tools it provides to facilitate many common UI design patterns and other WPF application framework concepts. This topic assumes Intermediate knowledge of WPF including a basic understanding of XAML, Templates and Binding.”

If you are in the area, please stop by as I think it will be a fun and knowledgeable session!

No Comments

Razre WPF Framework

Hello all!

I have just released the Razre WPF Framework to CodePlex.  You have visit it here.

The framework provides the following functionality.

  • A Navigation system to a MainRegion.  Can provide a dynamic, custom transition animation.
  • A DataTemplate View resolution implementation of the Model-View-ViewModel (MVVM) UI design pattern.
  • A full Layout theming mechanism to swap out the entire visual representation of a ViewModel.

Each of the systems are integrated with each other to provide a robust and performant mechanism in which to provide this functionality in a new WPF application.

The sample application needs alot of work right now from the visual standpoint, but I think the code is fairly well organized to show how this framework can be used.

I will be adding new functionality to the framework as time goes by, so look for some cool updates to it.

I hope everyone finds the framework helpful and as always, Happy Coding!

No Comments

WPF Tips and Tricks Part 1

So I was at the local Atlanta Silverlight Meetup last night and we got on the topic what you get and dont get from most training programs for WPF and Silverlight.  While there are some out there that are very good about providing the full in-depth knowledge of WPF programming there are sometimes items that are very important to know but get left out.  I refer to these as Tips and Tricks.  I talked about some of them and found out most of them had not run into these scenario’s and understanding of what WPF does.  I have found some of these out on the web already but I wanted to do a blog series of the Tips and Tricks I find to be very good to understand.

The first tip I end up giving when talking to people who are new to WPF is about a situation with Converters.  I find that when Converters are first seen they are loved and then used everywhere.  Well a Converter is not as performant as a Trigger.  A lot of the time I see converters created that could very easilly be represented as a trigger and by swapping out all of the converters with the triggers we saw a good performance increase.  So my first tip is “Try to not use converters if you dont have to, see if you can find a way to use a trigger to achieve the same result”.

Part 2 coming soon!

No Comments

Razre WPF Framework

Hello Everyone!

Wanted to give an update on a framework I am working on called Razre.  This framework utilizes some pieces of Prism2 and provides a few more functional framework pieces.  Currently the features I have working are Primary Navigation with customizable transition animation, An implementation of the MVVM UI design pattern that utilizes DataTemplates to resolve a View to a ViewModel and a full DataTemplate to ViewModel Themeing mechanism.

The different pieces are tied into each other to provide a rich and performant base system from which to develop upon.  The NavigationManager allows to define primary screen navigation by navigating to custom visuals or directly to an instance of a ViewModel.  The MVVM system utilizes a ViewModelFactory to create and resolve the appropriate View through a DataTemplate without relying on a DynamicResource.  The themeing mechanism understands how to notify a ViewModel when its theme has changed so that the ViewModel can find a new DataTemplate pointing to a completely different View giving us full visual theming support.

I have the project up on CodePlex at http://razre.codeplex.com/ but i have not published the project yet.  My sample application needs alot of work and i still need to do more exection handling and commenting increasing the robustness of the framework.

Look to see it coming soon!

No Comments

New Blog Site

Hello Everyone!

So ive spent a few days working on a new blog site and here it is!  If anything ends up missing feel free to contact me.

More content to come soon.  I am currently working on a Template for a WPF application framework that will provide an MVVM UI design pattern implementation with templates and guidlines, Navigation Framework with a sample on how to provide a dynamic animation transition, Layout Theming and Color Theming.  I will be presenting this as part of a User Group speaking I will be doing in Columbia, SC on October 26th.

No Comments

Beyond the Plugin and into the Browser

Hello everyone!

So last saturday we had the Atlanta Silverlight Firestarter event and we could not have asked for a better day!  We had lots of people interested all day in the topics and many excellent speakers from around the United States.  It was alot of fun!

The presentation I did was Beyond the Plugin and into the Browser.  This topic showed how you can utilize the browser that is hosting the Silverlight Application so that you can interact with the web application that contains it.

The slides and code samples are available for download here.

Here is a summary of what it covers.

Access to the DOM

  • Create new elements and add them
  • Modify existing elements
  • Remove elements
  • Familiar Javascript-like objects

Javascript Interaction

  • Work with events
  • Full Access to the Window object
  • Execute dynamically generated Javascript
  • Expose Silverlight objects to Javascript

Navigation By URI Syntax

  • Navigation Frame
  • URI Mapper
  • Bookmarks
  • Custom URI

I hope you all enjoy the presentation and remember to visit http://www.silverlightatlanta.net/ to check out what our local user group is up to!

No Comments