Introducing Expression Blend for Visual Studio Part 1

image
Introducing Expression Blend for Visual Studio using XAML Part 1

By Don Burnett Expression Blend MVP 2011-2012

Just what is Expression Blend for Visual Studio ? Why is Expression Blend now a Visual Studio product ? Well as most folks familiar with Windows development know, the process is not just about the programmer but it is also about incorporating good design for your user. About six years ago Microsoft Expression Blend was introduced as a what you see is what you get interface design tool and versions of this program have appeared to support not just WPF (Windows Presentation Foundation) tools but also support platforms as Silverlight (for .NET web browser based applications), Phone 7, and Sketchflow prototyping. All of these tools (while containing it’s own code editor) always allowed you to integrate directly with the Visual Studio code IDE (Integrated Development Environment).

Blend Should Be Everywhere!

Late last year when Microsoft decided that it was going to start focusing on putting together a next generation Windows environment that became Windows 8, they decided to promote better synergy between all platform product groups. Blend has always been directly part of that and it made sense that Microsoft could start integrating all of these environments together. Developers find themselves in Blend too.  Out of this (and the fact that Expression Blend and Expression Encoder were tightly part of the same workflow for many users out there and Expression Design had been supplanted by Adobe Photoshop and Adobe Illustrator Importing directly from Blend it made sense that in a revamped environment that Blend would make sense to be part of Visual Studio and a version would come with or be available to every version of Visual Studio available out there including Express Editions. 

When the product groups inside Microsoft were re-organized and integrated Microsoft also began sharing code between the Visual Studio XAML designer group and the Blend Group to make a more consistent environment between Blend and Visual Studio. This has produced some spectacular results. It also meant a version of Blend should make it to all development platforms Microsoft supports.

With the announcement of Windows 8 Microsoft has also integrated HTML 5 designer capabilities optionally instead of XAML, into the mix, for Windows 8 METRO applications (which work much like apps do in Windows Phone 7)

A Tour of The New Blend Beta

image

From the first glance we see that the New Blend is not a METRO app itself, but looks familiar and runs in the “classic desktop” environment for now.. In fact, besides some better more readable icons, it looks very much like the same old Blend we all know and love. However, there are a FEW additions to support HTML 5 and CSS 3.  And yes Virginia there is support for CSS 3 Media Queries before you ask..

The Project Menu

image

The project menu has been re-designed.. In a WinRT/ Metro app you will notice some difference to your “Solution”. There is now a “Common” folder with some new files that MUST be present to make the application work, these include BindableBase.cs, a set of standard XAML styles for the application called “StandardStyles.xaml”, RichText Column support, and LayoutAwarePage.cs. There are also two default converters files present for all metro apps called a BooleanNegation converter and a BooleantoVisibility converter. They help you convert datatypes from the ones you use in code to the types that are required for on-screen manipulation.

Also present in this beta (though creating a sample datasource thus far isn’t present in this beta) is a sample datasource so you do have a template for creating and working with Sample Data. It can be easily modified to support your own data (more on this later).

There is also a package.appxmanifest  file that is required for metro apps. Much like windows phone apps the manifest allows the app to be identified and signed with the appropriate identity information and developer “signatures”.

The package.appxmanifest file

As you can see below the sample app manifest contains identity information, pre-requisites for OS Versioning, a resources section to provide Windows the basic information to hook the application into the METRO environment and a capabilities section much like Windows Phone to identify things like if the application can access the internet or not.

<?xml version=”1.0″ encoding=”utf-8″?>
<Package xmlns=”
http://schemas.microsoft.com/appx/2010/manifest”>

  <Identity Name=”5274dfe2-c8a0-408e-833c-f887ff6a9f1c”
            Publisher=”CN=don”
            Version=”1.0.0.0″ />

  <Properties>
    <DisplayName>GridExampleXAML</DisplayName>
    <PublisherDisplayName>don</PublisherDisplayName>
    <Logo>Assets\StoreLogo.png</Logo>
    <Description>GridExampleXAML</Description>
  </Properties>

  <Prerequisites>
    <OSMinVersion>6.2</OSMinVersion>
    <OSMaxVersionTested>6.2</OSMaxVersionTested>
  </Prerequisites>

  <Resources>
    <Resource Language=”x-generate”/>
  </Resources>

  <Applications>
    <Application Id=”App”
        Executable=”$targetnametoken$.exe”
        EntryPoint=”GridExampleXAML.App”>
        <VisualElements
            DisplayName=”GridExampleXAML”
            Logo=”Assets\Logo.png”
            SmallLogo=”Assets\SmallLogo.png”
            Description=”GridExampleXAML”
            ForegroundText=”light”
            BackgroundColor=”#222222″>
            <DefaultTile ShowName=”allLogos” />
            <SplashScreen Image=”Assets\SplashScreen.png” />
        </VisualElements>
    </Application>
  </Applications>
  <Capabilities>
    <Capability Name=”internetClient” />
  </Capabilities>
</Package>

For more information about setting up these capabilities, check out Microsoft’s information at:

http://msdn.microsoft.com/en-us/library/windows/apps/br211380.aspx

Creating a New Project

Upfront we notice that there are METRO style monochrome icons that are much more readable.. If we go to create a “New Project” we will notice a few new project types and templates.  There is HTML and XAML available for Creating a Windows 8/WinRT  Metro Style Application.

image

 

There are in-built templates for Blank, Grid, Split, Fixed Layout, and Navigation Style Apps.. But more on this a bit later.. Notice the Javascript support above for creating a METRO style app as well..

image

XAML support isn’t forgotten either with it’s own sets of templates.

Grid Applications

image


If you select a “Grid Application”, Blend will provide you with a “Single Page Project that navigates betwee groups of items and has dedicated “Master-Detail” pages to display Items.. Here is a view of the template’s master-detail pages in action.

image

GroupDetailPage.xaml

image

ItemDetailPage.XAML

image

We can deploy this skeleton code either directly to the environment or test it on a Windows Tablet Device Simulator..  We can set this up through a panel in the “Platform”  panel in Blend..

image

You can set the screen size to match a particular on market device’s resolution and DPI when previewing and check your layouts with Horizontal and Vertical functionality (portrait/landscape) as well as scaling.. You can set the deploy target also to your local machine instead of the Emulator/Simulator as shown in the graphic above..

Deployed Locally

image

Deployed to the Simulator

image

Other Blend Features In XAML

The Visual State Manager

In the past if you were not a Silverlight designer you will not notice any default states or defined states in the visual state manager. In a WPF application you had to define all of these yourself..  For METRO apps there are are few already defined states that accommodate different screen modes..

image

These including Landscape (full screen) mode, Filled Mode, Portrait mode, and Snapped mode. I highly recommend you do not delete any of these unless your “METRO” app is only supporting one of these modes which again is HIGHLY NOT recommended..

You can use the state manager to create and handle state management of your own on-screen items, controls and their transitions, by creating more visual state groups for your own elements in XAML

Timeline Animation

You can also create complex animations with the OBJECTS and TIMELINE storyboard option.. In this example I am creating a new storyboard on one of the new METRO “FlipView” controls..

image

image

 

Collections

Collections in XAML for “Metro Apps” have been improved over other versions of XAML you can now create a CollectionView for items that are grouped on to your page.. Setting the source for a Collection of elements to be used on a page is now quite easy in XAML. In our UserControl Resources we just add a CollectionViewSource Element as seen in the XAML  below…

<common:LayoutAwarePage
    x:Name=”pageRoot”
    x:Class=”GridExampleXAML.GroupedItemsPage”
    xmlns=”
http://schemas.microsoft.com/winfx/2006/xaml/presentation”
    xmlns:x=”http://schemas.microsoft.com/winfx/2006/xaml”
    xmlns:local=”using:GridExampleXAML”
    xmlns:data=”using:GridExampleXAML.Data”
    xmlns:common=”using:GridExampleXAML.Common”
    xmlns:d=”
http://schemas.microsoft.com/expression/blend/2008″
    xmlns:mc=”http://schemas.openxmlformats.org/markup-compatibility/2006″
    mc:Ignorable=”d”>

    <UserControl.Resources>

        <!– Collection of grouped items displayed by this page –>
       
<CollectionViewSource
            x:Name=”groupedItemsViewSource”
            Source=”{Binding Groups}”
            IsSourceGrouped=”true”
            ItemsPath=”Items”
            d:Source=”{Binding ItemGroups, Source={d:DesignInstance Type=data:SampleDataSource, IsDesignTimeCreatable=True}}”/>
    </UserControl.Resources>


Blend Goes Native with C++ Project Supportimage

Many programmers were shocked to hear that you could create a Windows Metro App UI now in HTML and JavaScript, but may the most exciting and OVERLOOKED support in Blend for Visual Studio is now the ability to create Windows apps directly in Windows own Native C++ environment.. Before Native Code in XAML was impossible unless you had created an App for Windows Embedded with Visual Studio 8 and the “WEST” Toolkit using Silverlight with C++.. Now because of the merge of product groups Microsoft has now enabled non .NET coding. They have also taken most of the pain away of trying to write a SKELETON “metro” app for those new to Native code development with Windows. Microsoft also has documented these templates well for new users.. Here is a link for you:     http://go.microsoft.com/fwlink/?LinkId=234232

Lets take a look at our ItemDetailPage.xaml’s C plus plus (.CPP) and header (.h) files..

ItemDetailPage.xaml.h

//
// ItemDetailPage.xaml.h
// Declaration of the ItemDetailPage class
//

#pragma once

#include “pch.h”
#include “Common\LayoutAwarePage.h” // Required by generated header
#include “Common\RichTextColumns.h” // Required by generated header
#include “ItemDetailPage.g.h”

#include <collection.h>

namespace Application13
{
    /// <summary>
    /// A page that displays details for a single item within a group while allowing gestures to
    /// flip through other items belonging to the same group.
    /// </summary>
    public ref class ItemDetailPage sealed
    {
    public:
        ItemDetailPage();

    protected:
        virtual void OnNavigatedTo(Windows::UI::Xaml::Navigation::NavigationEventArgs^ e) override;
    };
}

ItemDetailPage.xaml.cpp

//
// ItemDetailPage.xaml.cpp
// Implementation of the ItemDetailPage class
//

#include “pch.h”
#include “ItemDetailPage.xaml.h”
#include “DataModel\SampleDataSource.h”

using namespace Application13;
using namespace Application13::Data;

using namespace Platform;
using namespace Windows::Foundation;
using namespace Windows::Foundation::Collections;
using namespace Windows::Graphics::Display;
using namespace Windows::UI::ViewManagement;
using namespace Windows::UI::Xaml;
using namespace Windows::UI::Xaml::Controls;
using namespace Windows::UI::Xaml::Controls::Primitives;
using namespace Windows::UI::Xaml::Data;
using namespace Windows::UI::Xaml::Input;
using namespace Windows::UI::Xaml::Media;
using namespace Windows::UI::Xaml::Navigation;

// The Item Detail Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234232

ItemDetailPage::ItemDetailPage()
{
    InitializeComponent();
}

/// <summary>
/// Invoked when this page is about to be displayed in a Frame.
/// </summary>
/// <param name=”e”>Event data that describes how this page was reached.  The
/// Parameter property provides the initial item to be displayed.</param>
void ItemDetailPage::OnNavigatedTo(NavigationEventArgs^ e)
{
    auto item = safe_cast<SampleDataItem^>(e->Parameter);
    DefaultViewModel->Insert(“Group”, item->Group);
    DefaultViewModel->Insert(“Items”, item->Group->Items);
    flipView->SelectedItem = item;
}

The code isn’t that much different than .NET code for the skeleton and the new templates take much of the guess workout and make doing a C++ native app even for beginning programmers a doable thing.

One of the first things I noticed about C++ apps is that they are already nicely touch enabled and on the properties panel there are some new options..

image

To Be Continued…

Part two will continue our look at Blend for Visual Studio and what’s missing from Blend Ultimate and will look at Visual Studio 11 Integration and HTML 5/CSS 3 layout based applications for Windows 8..

Advertisements

About Don Burnett

Changing how people interact with software

Posted on March 18, 2012, in Expression Blend for Visual Studio, HTML 5, Windows 8, XAML and tagged , , , . Bookmark the permalink. Leave a comment.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: