XAML: Turn .NET into a Browser

A look at eXtensible Application Markup Language (XAML) and open source alternatives

Gerald Bauer (SchemaSoft .NET Division)
BC .NET User Group (.net BC) Talk, December 2004

Disclaimer: I work at SchemaSoft. The opinions expressed here are my own, and neither SchemaSoft nor any other party necessarily agrees with them.

Table of Contents

XAML

Agenda - The Road Ahead


Who is this guy?

Disclaimer: I work at SchemaSoft. The opinions expressed here are my own, and neither SchemaSoft nor any other party necessarily agrees with them.


About SchemaSoft

Find out more about SchemaSoft @ schemasoft.com


What is XAML?

XAML - eXtensible Application Markup Language

pronouced "zammel"

Lets you create desktop applications, web applications, animations, print documents, and much much more using markup

XAML combined with the next-gen Windows graphics kernel (code-named Avalon) is an all-in-one markup language for hypertext (HTML), vector graphics (SVG), animations (Flash,SMIL), print documents (PDF,XSL-FO), forms (XForms,XUL), and much more.

The best of both worlds: In the XAML world there's no longer a difference between a web application and a windows application. Windows is the browser kernel and Internet Explorer is just a shell.

The best of all worlds: A single programming model for media, documents and applications.


First Impression - XAML In Action - Forms

<Window Text="Xul Challenge 2004">
  <FlowPanel>
    <SimpleText>Counter Sample</SimpleText>
    <TextBox ID="ValueTextBox" HorizontalAlignment="Center" IsReadOnly="True"/>
    <FlowPanel HorizontalAlignment="Center" Width="100%">
       <Button Click="Dec">Dec (-)</Button>
       <Button Click="Clear">Clear</Button>
       <Button Click="Inc">Inc (+)</Button>
    </FlowPanel>
  </FlowPanel>
</Window>

Second Impression - XAML In Action - Documents

<TextPanel Background="white">
  <Section>
    <Heading>Adaptive-flow-format Example</Heading>
       <Paragraph>This example shows the advanced capabilities of adaptive-flow format. Lorem ipsum dolor sit amet,
 consectetuer adipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut 
wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
 Duis autem vel eum iriure.</Paragraph>
       <Paragraph>Notice how images and text are flowed intelligently to enhance the reading experience. Lorem ipsum dolor
 sit amet, consectetuer dipiscing elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat.
 Ut wisi enim ad minim veniam, quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.
 Duis autem vel eum iriure.</Paragraph>
       <Paragraph>Adaptive-flow format is an exciting new feature. Lorem ipsum dolor sit amet, consectetuer adipiscing
 elit, sed diam nonummy nibh euismod tincidunt ut laoreet dolore magna aliquam erat volutpat. Ut wisi enim ad minim veniam,
 quis nostrud exerci tation ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat. Duis autem vel eum
 iriure.</Paragraph>
  </Section>
</TextPanel>

Third Impression - XAML In Action - 2D Vector Graphics

Smiley Winking

<Canvas Width="120" Height="120">
  <Ellipse CenterX="60" CenterY="60" RadiusX="50" 
        RadiusY="50" Fill="Gray" Stroke="Black"/>
  <Ellipse CenterX="40" CenterY="40" RadiusX="10" 
        RadiusY="10" Fill="Blue"/>
  <Ellipse CenterX="80" CenterY="40" RadiusX="10" 
        RadiusY="10" Fill="Blue">
    <Ellipse.RadiusY>
      <LengthAnimationCollection xmlns="anim">
        <LengthAnimation From="10" To="1" 
              Duration="0.5" AutoReverse="True" 
              RepeatDuration="Indefinite"/>
        </LengthAnimationCollection>
      </Ellipse.RadiusY>
  </Ellipse>
  <Polyline Points="30, 70, 60, 80, 90, 70" 
        StrokeThickness="10" Stroke="Red"/>
</Canvas>

Lines of Code Benchmark: XAML vs. C#

XAML Version

<Button Background="LightSeaGreen" FontSize="24pt">Calculate</Button>

C# Version

Button b = new Button();
b.Background = Brushes.LightSeaGreen;
b.FontSize = new FontSize( 24, FontSizeType.Point );
b.Content = "Calculate";

XAML Version

<TextPanel 
     Background="BlanchedAlmond" 
     FontFamily="Comic sans MS" 
     FontSize="36pt"
     HorizontalAlignment="Center">
    Hello, world!
</TextPanel>

C# Version

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;

class HelloWorldApp : Application
{
   static void Main()
   {
       HelloWorldApp app = new HelloWorldApp();
       app.Run();
   }
   
   protected override void OnStartingUp( StartingUpCancelEventArgs args )
   {
       Window win = new Window();
       TextPanel tp = new TextPanel();

       tp.Background = Brushes.BlanchedAlmond;
       tp.FontFamily = "Comic sans MS";
       tp.FontSize = new FontSize( 36f, FontSizeType.Point);
       tp.HorizontalAlignment = System.Windows.HorizontalAlignment.Center;
       tp.TextRange.Text = "Hello, world";
          
       win.Children.Add(tp);
       win.Show();
   }
}

XAML Widget Tag Sampling - XUL-like Tags


XAML Box Layout Tags (aka Panels)

<GridPanel> lays out children in rows and columns
<DockPanel> lays out children docked to the top, bottom, left, right side of the panel
<FlowPanel> lays out children left-to-right and adds line breaks, and text wraps if necessary
<Canvas> absolute positioning using x, y coordinates

XAML (Hyper)Text Tag Sampling - HTML-like Tags

<Section> like XHTML2 <section>
<Heading> like HTML <h1>, <h2>, <h3>, <h4>, <h5>, <h6>
<Paragraph> like HTML <p>
<Block> like HTML <div>
<Inline> like HTML <span>
<Note> like HTML <blockquote>
<Line> like XHTML2 <l>
<LineBreak> like HTML <br>
<List> like HTML <ul>,<ol>
<HyperLink> like HTML <a>
<Image> like HTML <img>
<Bold> like HTML <b>
<Italic> like HTML <i>
and many more

Article Tip: A Standards-based Look at XAML's Feature by Nigel McFarlane


XAML 2D Graphics Tag Sampling - SVG-like Tags

<Canvas> like SVG <svg> A drawing area
<Ellipse> like SVG <ellipse>,<circle> Draws an ellipse
<Line> like SVG <line> Draws a straight line
<Path> like SVG <path> Draws a series of connected lines or curves
<Polygon> like SVG <polygon> Draws a polygon
<Polyline> like SVG <polyline> Draws a series of connected straight lines
<Rectangle> like SVG <rect> Draws a - suprise, suprise - rectangle
<Glyphs> like SVG <glyph> Represents one or more text characters (glyphs) used to represent fonts.
<TransformDecorator> like SVG transform attribute Rotates, scales, shears or relocates shapes

Article Tip: A Standards-based Look at XAML's Feature by Nigel McFarlane


XAML Styling Sample

<Style def:Name="Style1">
  <Button Background="Red" />
</Style>

<Style def:Name="Style2" BasedOn="{Style1}">
  <Button FontSize="24" />
</Style>

Usage:

<Button Style="{Style1}">Style 1</Button>
<Button Style="{Style2}">Style 2</Button>

XAML and Open Standards

There's no money in open royality-free standards for vendors.

Q: Why doesn't Microsoft invest in open royality-free standards?

Robert Scoble (Microsoft Tech Evangelist): We're not a charity. We are investing billions of dollars in our technology and our shareholders want a return on investment.

2847 Microsoft patents and counting.


XAML is XML but XML is not XAML

XML Syntax Extensions:


XAML Compound Syntax - Turn Attributes Into Tags

"Standard" Syntax

<Button Background="Red">
    Cancel
</Button>

Compound Syntax

<Button>
    Cancel
    <Button.Background>
        Red
    </Button.Background>
</Button>

Why?

<Button>
  Cancel
  <Button.Background>
    <SolidColorBrush>
      <SolidColorBrush.ColorAnimations>
        <ColorAnimation From="Red" To="Blue" Duration="10" Fill="Hold"/>
      </SolidColorBrush.ColorAnimations>
    </SolidColorBrush>
  </Button.Background>
</Button>

XAML Compact Syntax - Turn Tags Into Attributes

"Standard" Syntax

<Text>
  <Text.ImageEffect>
    <ImageEffectBlur Radius="3"/>
  </Text.ImageEffect>
  Inside XAML
</Text>

Compact Syntax

<Text ImageEffect="*ImageEffectBlur(Radius=3)">
Inside XAML
</Text>

XAML History

eXtensible Avalon Markup Language - markup language for the Windows 2006 graphics kernel (desktop composition engine code-named Avalon) only

eXtensible Application Markup Language - markup language for wiring up all kinds of .NET objects - no longer tied to Windows 2006 graphics kernel (code-named Avalon)

eXtensible Application Markup Language - markup language for wiring up all kinds of objects - no longer tied to .NET; XAML parsers for Java, Flash, and so on upcoming


Avalon History

Windows 2006 graphics kernel only shipping with Windows 2006 (code-named Longhorn)

next-generation Windows graphics kernel available as an addon package (WinFX SDK) for Windows XP and Windows Server 2003 (requires .NET2 and managed DirectX)


What is XAML? Revisited


Inside XAML - How does a XAML parser work?

All the XAML parsers essentially work the same at the core:

That, in a nutshell, is it.

Source: Writing XAML Friendly Assemblies by Marc Clifton


What is Windows Forms Markup Language (WFML)?

Unsupported code-drop sample of XAML-like parser for Windows Forms (.NET 1.1+) by Joe Stegman (Microsoft)

Lets you build Windows Forms using - suprise, suprise - XML. Example:

<Form wfml:root="true" Text="Basic Sample" Size="300,200">
   <Label Text="Hello World" AutoSize="True" Location="10,20"/>
   <method.Show/>
</Form>

Find out more @ http://windowsforms.net/articles/wfml.aspx


What is MyXAML?

Supported XAML parser for .NET (.NET1, .NET2, Compact) by Marc Clifton

Dual Licensed (Best of Both Worlds) - Free, Open Source Version and Commercial "Classic" Licensed Version

What can MyXAML do?


First Impression - MyXAML In Action

<MyXaml>
  <Form Name="AppMainForm"
        Text="XUL Challenge 2004"
        StartPosition='CenterScreen'
        Size="256, 144"
        FormBorderStyle="FixedSingle">
    <Style def:Name="ButtonStyle">
      <StyleProperties>
	    <PropertyStyle FlatStyle="System"/>
	    <PropertyStyle Size="72, 25"/>
      </StyleProperties>
    </Style>
    <Controls>
      <GroupBox Name="GroupBox1" Text="Counter" Location="8, 8" Size="232, 96" FlatStyle="System">
        <Controls>
          <TextBox Name="TextBox1"
                   Text="0" 
                   Location="8, 24" 
                   Size="216, 23" 
                   TextAlign="Center" 
                   BackColor="Black" 
                   ForeColor="Yellow" 
                   Font="Microsoft Sans Serif, 10pt, style=Bold"/>
          <Button Name="Button1" Text="Dec(-)" Location="8, 56" Style="{ButtonStyle}" Click="OnDec"/>
          <Button Name="Button2" Text="Clear" Location="80, 56" Style="{ButtonStyle}" Click="OnClear"/>
          <Button Name="Button3" Text="Inc(+)" Location="152, 56" Style="{ButtonStyle}" Click="OnInc"/>
        </Controls>
      </GroupBox>
    </Controls>
  </Form>
</MyXaml>

The MyXAML Toolbox

MyXAML Loader. Lets you start up an application from the .XAML file directly. (More)

MyXAML Lint. Lets you check your .XAML files "ahead-of-time" for errors. (More)

MyXAML Visual Studio Serializer. Lets you use Visual Studio to design forms and save your forms as XAML. (More)

MyXAML Solution Packs.

MyXAML Forms Designer (Upcoming).


XAML-Friendly, Markup-Friendly .NET Libraries

Seven Golden Rules for "XAML-Friendly" .NET Libraries

Source: Writing XAML Friendly Assemblies by Marc Clifton


XAML-Friendly .NET Library Case Study

C# Source:

public class Name
{
  protected string firstName;
  protected string lastName;
  protected ArrayList phoneNums;

  public string FirstName
  {
    get {return firstName;}
    set {firstName=value;}
  }

  public string LastName
  {
    get {return lastName;}
    set {lastName=value;}
  }

  public ArrayList PhoneNums
  {
    get {return phoneNums;}
  }

  public Name()
  {
    phoneNums=new ArrayList();
  }
}

XAML "Out-of-the-Box" Markup Usage:

<Name FirstName="Marc" LastName="Clifton">
  <PhoneNums>
    <PhoneNum Type="Home" Number="800-333-1212"/>
    <PhoneNum Type="Cell" Number="619-222-2345"/>
  </PhoneNums>
</Name>  

XAML-Friendly .NET Library Case Study: Gtk#

Gtk# Source:

Window window = new Window("Simple Application"); // 1

Label label = new Label("Name");  // 1
Entry entry = new Entry();
Button button = new Button("Hello!");  // 1
    
window.DeleteEvent += 
  new DeleteEventHandler(window_DeleteEvent);
button.Clicked += new EventHandler(button_Clicked);

VBox vbox = new VBox();

HBox hbox = new HBox();
hbox.PackStart(label, false, false, 12);  // 2
hbox.PackStart(entry, false, false, 12);  // 2
vbox.PackStart(hbox);                     // 2
vbox.PackStart(button, false, false, 12); // 2

window.Add(vbox);   // 3
window.SetDefaultSize(200, 100);

Issues:

Conclusion: If you want to "script" your .NET libraries using markup (e.g. XAML) than you either have to follow the seven golden rules for "XAML-friendly" .NET libraries or you have to create custom XAML parser extensions.


MyXAML Article Mania - Getting Started With MyXAML

MyXAML --XAML-style GUI Generator
Generate controls, set property values, and wire up event handlers at runtime from an XML definition.
http://www.codeproject.com/cs/miscctrl/xmlGuiGenerator.asp

A Vector Graphics Rendered Animated Clock
Demos using MyXAML with a vector graphics engine to create an analog clock
http://www.codeproject.com/dotnet/vgclock.asp

An RSS 2.0 Blog Reader Written In MyXAML
An RSS 2.0 Blog Reader Written in MyXAML
http://www.codeproject.com/dotnet/RssMyXaml.asp

Consuming A Weather Web Service With MyXAML
Demos using MyXAML to consume a web service
http://www.codeproject.com/dotnet/MyXamlWeather.asp

MyXAML Database Tutorial
Demos connecting, displaying, and manipulating data in a database using MyXAML.
http://www.myxaml.com/wiki/ow.asp?DatabaseTutorial

MycroXAML
A declarative XML parser in less than 300 lines of code
http://www.codeproject.com/dotnet/MycroXaml.asp

Writing XAML Friendly Assemblies
How to write assemblies so that they will work with the various XAML parsers that are starting to emerge.
http://www.codeproject.com/gen/design/xaml.asp


MyXAML News - Marc Clifton Blog
http://myxaml.com/marcclifton

Richmond Post Q & A with Marc Clifton
http://xul.sourceforge.net/post/2004/04/xul...part_i.html | http://xul.sourceforge.net/post/2004/05/xul...part_ii.html


Roll Your Own XAML Parser - What is MycroXAML?

A XAML parser in less than 300 lines of C# code; first published in a CodeProject article by Marc Clifton (of MyXAML fame); MycroXAML is in the public domain

What can MycroXAML do?


First Impression - MycroXAML In Action

MycroXAML

<MycroXaml Name="Form"
  xmlns:wf="System.Windows.Forms, System.Windows.Forms,
        Version=1.0.5000.0, Culture=neutral,
        PublicKeyToken=b77a5c561934e089"
  xmlns:mc="MycroXaml.MxContainer, MycroXaml.MxContainer">
  <wf:Form Name="AppMainForm"
    Text="Color Chooser"
    ClientSize="400, 190"
    BackColor="White"
    FormBorderStyle="FixedSingle"
    StartPosition="CenterScreen">

    <wf:Controls>
      <wf:TrackBar Name="RedScroll" Orientation="Vertical"
          TickFrequency="16" TickStyle="BottomRight" Minimum="0"
          Maximum="255" Value="128" Scroll="OnScrolled" Size="42, 128"
          Location="10, 30"/>
      <wf:TrackBar Name="GreenScroll" Orientation="Vertical"
          TickFrequency="16" TickStyle="BottomRight" Minimum="0"
          Maximum="255" Value="128" Scroll="OnScrolled" Size="42, 128"
          Location="55, 30"/>
      <wf:TrackBar Name="BlueScroll" Orientation="Vertical"
          TickFrequency="16" TickStyle="BottomRight" Minimum="0"
          Maximum="255" Value="128" Scroll="OnScrolled" Size="42, 128"
          Location="100, 30"/>

      <wf:Label Size="40,15" TextAlign="TopCenter"
          Font="Microsoft Sans Serif, 8.25pt, style= Bold"
          Location="10, 10" ForeColor="Red" Text="Red"/>
      <wf:Label Size="40,15" TextAlign="TopCenter"
          Font="Microsoft Sans Serif, 8.25pt, style= Bold"
          Location="55, 10" ForeColor="Green" Text="Green"/>
      <wf:Label Size="40,15" TextAlign="TopCenter"
          Font="Microsoft Sans Serif, 8.25pt, style= Bold"
          Location="100, 10" ForeColor="Blue" Text="Blue"/>

      <wf:Label Name="RedValue" Size="40,15" TextAlign="TopCenter"
          Font="Microsoft Sans Serif, 8.25pt, style= Bold"
          Location="10, 160" ForeColor="Red">
        <wf:DataBindings>
          <mc:DataBinding PropertyName="Text" DataSource="{RedScroll}"
              DataMember="Value"/>
        </wf:DataBindings>
      </wf:Label>

      <wf:Label Name="GreenValue" Size="40,15" TextAlign="TopCenter"
          Font="Microsoft Sans Serif, 8.25pt, style= Bold"
          Location="55, 160" ForeColor="Green">
        <wf:DataBindings>
          <mc:DataBinding PropertyName="Text" DataSource="{GreenScroll}"
              DataMember="Value"/>
        </wf:DataBindings>
      </wf:Label>

      <wf:Label Name="BlueValue" Size="40,15" TextAlign="TopCenter"
          Font="Microsoft Sans Serif, 8.25pt, style= Bold"
          Location="100, 160" ForeColor="Blue">
        <wf:DataBindings>
          <mc:DataBinding PropertyName="Text" DataSource="{BlueScroll}"
              DataMember="Value"/>
        </wf:DataBindings>
      </wf:Label>

      <wf:PictureBox Name="ColorPanel" Location="90, 0" Size="200, 100"
          Dock="Right" BorderStyle="Fixed3D" BackColor="128, 128, 128"/>
    </wf:Controls>
  </wf:Form>
</MycroXaml>

Source: Code Project Article: MycroXAML by Marc Clifton

MSXAML

<DockPanel xmlns="http://schemas.microsoft.com/2003/xaml"
           xmlns:def="Definition" def:Language="C#">
    <FlowPanel Width="50%" DockPanel.Dock="Left" >

        <FlowPanel.Resources>
            <Style>
                <Text Height="36pt" FontSize="12pt"
                      HorizontalAlignment="Center" 
                      VerticalAlignment="Center"/>
            </Style>
            <Style>
                <VerticalSlider Width="50%" Margin="25%,0,25%,0"
                                Minimum="0" Maximum="255" 
                                SmallChange="1" LargeChange="16"
                                DockPanel.Dock="Fill"/>
            </Style>
        </FlowPanel.Resources>

        <DockPanel Width="33.3%">
            <Text DockPanel.Dock="Top" Foreground="Red">Red</Text>
            <Text DockPanel.Dock="Bottom" Foreground="Red">0</Text>
            <VerticalSlider ID="RedScroll" ValueChanged="OnScrolled"/>
        </DockPanel>

        <DockPanel Width="33.3%">
            <Text DockPanel.Dock="Top" Foreground="Green">Green</Text>
            <Text DockPanel.Dock="Bottom" Foreground="Green">0</Text>
            <VerticalSlider ID="GreenScroll" ValueChanged="OnScrolled"/>
        </DockPanel>

        <DockPanel Width="33.3%">
            <Text DockPanel.Dock="Top" Foreground="Blue">Blue</Text>
            <Text DockPanel.Dock="Bottom" Foreground="Blue">0</Text>
            <VerticalSlider ID="BlueScroll" ValueChanged="OnScrolled"/>
        </DockPanel>

        <def:Code>
           ...
        </def:Code>
    </FlowPanel>
    <TextPanel ID="ColorPanel" DockPanel.Dock="Right" 
               Width="50%" Background="Black"/>
</DockPanel>

Source: MSDN Article: Code Name Avalon: Create Real Apps Using New Code and Markup Model by Charles Petzold


MSXAML vs. MyXAML vs. WFML

Q: Can you tell us how MyXAML differs from Microsoft's Windows Forms Markup Language (WFML)?

Marc Clifton: There are some interesting differences. WFML provides a "method" element, allowing you to call a method with zero or one parameters. This is sort of a poor man’s implementation of inline coding, which MyXaml provides as a complete runtime compiled service. The WFML parser uses a "property-dot" notation for dealing with property types that the type converter can’t handle, similar to the Avalon-XAML compound property. Both are completely unnecessary if the parser is implemented correctly. For example, in WFML:

<MenuItem Text="New" >
  <property.MenuItems>
    <MenuItem Text="Window" Shortcut="CtrlN" />
    <MenuItem Text="-" />
    <MenuItem Text="Message" />
    <MenuItem Text="Post" />
    <MenuItem Text="Contact" />
    <MenuItem Text="Internet Call" />
  </property.MenuItems>
</MenuItem>

The MyXaml version is written:

<MenuItem Text="New" >
  <MenuItems>
    <MenuItem Text="Window" Shortcut="CtrlN" />
    <MenuItem Text="-" />
    <MenuItem Text="Message" />
    <MenuItem Text="Post" />
    <MenuItem Text="Contact" />
    <MenuItem Text="Internet Call" />
  </MenuItems>
</MenuItem>

One of the most striking differences however is WFML’s "argument" attribute, which allows you to instantiate classes that do not provide a default constructor, passing one and only one argument to the constructor. MyXaml handles this by implementing a generic Adapter Pattern so that non-compliant classes can be adapted to work with MyXaml. At some point, I’d like to look at the issue of instantiating classes that require arguments. .NET’s MethodInfo.Invoke already does all the hard work of finding the method that matches the argument types, so it really shouldn’t be that hard to pass both strings and references to classes already instantiated in the markup. MyXaml also provides a growing collection of useful extensions such as xml data sources, data binding, etc.

Q: Can you tell us how MyXAML differs from Microsoft's Longhorn Avalon XAML?

Source: Richmond Post Interview with Marc Clifton


Internet Explorer Is Dead - The Next Browser Is Windows 2006 Itself

No Internet Explorer Logo

Microsoft has frozen Internet Explorer for years and Microsoft is busy to add all new features not to the browser but to the next-gen Windows OS codenamed Longhorn to create a compelling reason for consumer to upgrade and buy a Windows license.

Microsoft has no interest in investing and working together to build open royality-free standards such as SVG, XForms, XUL, XHTML 2.0, and other next-gen markup languages for a rich internet for everyone. Instead Microsoft tries to establish its very own all-in-one Windows-only markup language as a defacto industry standard competing head on with HTML, SVG, XUL, CSS, PDF, and many more open royality-free formats


Quotes From the Microsoft Avalon Team

Rob Relyea (Avalon Program Manager, XAML "spec owner", Avalon Architect Team Member)

XAML is a markup language that can be used on Longhorn for many things including creating desktop apps, web pages, and printable documents.

Chris Anderson (Avalon Core Developer, Avalon Architect Team Member)

We are past the world of generating static snapshots of display and blasting them down to a client.

My not-to-hidden agenda here is simple - dynamic applications should be dynamic on the client. The server should send data - either through web services, database access, or any other wire protocol - and the client should consume that data and generate UI. The model of a server trying to generate the correct display for a client is just broken.

I'm a bit confused by the concern that Microsoft is somehow trying to threaten or take over the web with the introduction of a markup language to program Windows applications. XAML is a new programming model for the next release of Windows, code named "Longhorn". That's it.

Joe Beda (Avalon Core Graphics Developer)

Our rendering model is very much like that of SVG.

Our markup isn't the same mostly because XAML is a direct reflection of the programming model.

Our object model (OM) doesn't match the SVG DOM because we choose to go with an object model that more closely matches what we think our users expect.

XHTML and SVG both have image elements. We avoid this duplicity. Text is another area where we avoid a large amount of duplication.

Zhanbo Sun (Avalon Team Member)

A Longhorn application can run inside or outside Internet Explorer. The support for the new programming model is implemented by Avalon rather than by Internet Explorer. Technically speaking, Internet Explorer serves as the host when HelloPDC.xaml runs.


The Commercial Web vs. the Hippie Web

Part of the Longhorn strategy is to extract from the web all of the services with any profit model at all: web magazines, auction sites, news, online retailers, and so on. When Microsoft tempts these organizations and communities to Longhorn, the web suffers the death of a thousand cuts. Over here will be the standards-based web, with a gradually shrinking set of web sites. Over there will be the future Longhorn-based proprietary global infrastructure—a global version of the early Novell NetWare, a sort of stock market/CNN fusion for content delivery. For Microsoft, the best possible outcome is for the standards-based web to be reduced to the profitless: a few idealistic hippies, some idle perverts, and the disaffected. Few others will want to go there; so every day there will be fewer traditional websites, every day less relevance.

Source: Smoke, Mirrors and Silence: The Browser Wars Reignite by Nigel McFarlane


Amazon.com Case Study - Will Amazon.com Adopt XAML?

Amazon:

Customer:


Google.com Case Study - Will Google.com Adopt XAML?

Google competes head on with Microsoft (e.g. desktop search, internet search, email service, etc.) and thus Google will try to break free from the dependence on Internet Explorer (and thus Windows) and go so far as to create its own browser (e.g. GBrowser) offering XAML-like HTML extensions for creating desktop-style applications.


Reach vs. Rich - HTML vs XAML - Web vs. Windows

Reach - HTML browser are ubiquitous, don't require Windows license, use open royality-free patent-free standards

Rich - XAML offers richer user experience, requires Windows license, protected by patents, "standard" controlled by single for-profit company

Marketshare Forecast - XAML-Ready (Windows) Computers in 2006-2008

Year New Computers All Computers
2006 80 % 20 %
2007 90 % 40 %
2008 95 % 60 %

XAML Links, Links, Links

Microsoft XAML Tag Quick Reference
http://winfx.msdn.microsoft.com/winfx/port_ref_elements.aspx

Microsoft XAML Articles

Code Name Avalon: Create Real Apps Using New Code and Markup Model
by Charles Petzold, MSDN Magazine, January 2004
http://msdn.microsoft.com/msdnmag/issues/04/01/Avalon

Code Name Longhorn: A First Look at Writing and Deploying Apps in the Next Generation of Windows
by Dino Esposito, MSDN Magazine, January 2004
http://msdn.microsoft.com/msdnmag/issues/04/01/DevelopingAppsforLonghorn

Chapter 3: Controls and XAML - Introducing "Longhorn" for Developers
by Brent Rector (Wise Owl Consulting), December 2003
http://msdn.microsoft.com/library/en-us/dnintlong/html/longhornch03.asp

Inside XAML
by Ian Griffiths, ONDotnet.com, January 2004
http://www.ondotnet.com/pub/a/dotnet/2004/01/19/longhorn.html

A Standards-based Look at XAML's Features
by Nigel McFarlane, DevX, April 2004
http://www.devx.com/webdev/Article/20834

Microsoft XAML News/Blogs

Rob Relyea (Microsoft XAML Spec Owner - Mr. XAML)
http://www.longhornblogs.com/rrelyea

Microsoft XAML Clones

Mobiform XAML (Commercial)
http://www.mobiform.com

Xamlon (Commercial)
http://xamlon.com

MyXAML, MycroXAML

MyXAML (Dual-Licensed - Open Source and "Classic" Commercial License)
http://myxaml.com

MycroXAML (Public Domain)
http://sourceforge.net/projects/xaml

XAML Mailinglists

xaml-talk (XAML Developers Group)
http://groups.yahoo.com/group/xaml-talk

More XAML Links

XAML Resources
by Marc Clifton, Code Project, November 2004
http://www.codeproject.com/dotnet/xamlresources.asp


That's it - The Future Just Happened

Visit the United XAML site @ http://unitedxaml.org for more info