Hey everyone,
I was playing around with Expression Blend earlier today, and created a simple RSS viewer that takes the kForum RSS feed and allows selection/display of content:
The nice thing about this application is that no C# code was written - just data binding in XAML. If you are on Vista/XP, you can run this application on your comp by clicking here.
Here is the XAML code:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xml:lang="en-US"
x:Class="kForumRSS.Window1"
x:Name="Window"
Title="kForum RSS Browser"
Width="560" Height="269" Opacity="1" Icon="rss.png" WindowStyle="SingleBorderWindow" xmlns:d="http://schemas.microsoft.com/expression/blend/2006" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" ResizeMode="NoResize" ShowInTaskbar="False">
<Window.Resources>
<XmlDataProvider d:IsDataSource="True" Source="http://www.kirupa.com/forum/external.php?type=rss2" x:Key="kF">
<XmlDataProvider.XmlNamespaceManager>
<XmlNamespaceMappingCollection>
<XmlNamespaceMapping Prefix="content" Uri="<A href="http://purl.org/rss/1.0/modules/content/"/">http://purl.org/rss/1.0/modules/content/"/>
<XmlNamespaceMapping Prefix="dc" Uri="<A href="http://purl.org/dc/elements/1.1/"/">http://purl.org/dc/elements/1.1/"/>
</XmlNamespaceMappingCollection>
</XmlDataProvider.XmlNamespaceManager>
</XmlDataProvider>
<DataTemplate x:Key="titleTemplate">
<TextBlock Text="{Binding Mode=OneWay, XPath=.}"/>
</DataTemplate>
<DataTemplate x:Key="itemTemplate">
<StackPanel>
<TextBlock Height="18.96" FontWeight="Bold" Foreground="#FF000000" Text="{Binding Mode=OneWay, XPath=title}"/>
</StackPanel>
</DataTemplate>
<DataTemplate x:Key="descriptionTemplate">
<TextBox Text="{Binding Mode=OneWay, XPath=.}" TextWrapping="Wrap"/>
</DataTemplate>
<ControlTemplate TargetType="{x:Type ScrollViewer}" x:Key="ScrollViewerControlTemplate1">
<Grid x:Name="Grid" Background="{TemplateBinding Background}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<Rectangle Fill="{DynamicResource {x:Static SystemColors.ControlBrushKey}}" x:Name="Corner" Grid.Column="1" Grid.Row="1"/>
<ScrollContentPresenter Margin="0,0,8,0" x:Name="PART_ScrollContentPresenter" Grid.Column="0" Grid.Row="0" Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}" CanContentScroll="{TemplateBinding CanContentScroll}"/>
<ScrollBar Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" Cursor="Arrow" x:Name="PART_VerticalScrollBar" Grid.Column="1" Grid.Row="0" ViewportSize="{TemplateBinding ViewportHeight}" Maximum="{TemplateBinding ScrollableHeight}" Minimum="0" Value="{Binding Path=VerticalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent, AncestorType={x:Null}}}" AutomationProperties.AutomationId="VerticalScrollBar"/>
<ScrollBar Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" Cursor="Arrow" x:Name="PART_HorizontalScrollBar" Grid.Column="0" Grid.Row="1" Orientation="Horizontal" ViewportSize="{TemplateBinding ViewportWidth}" Maximum="{TemplateBinding ScrollableWidth}" Minimum="0" Value="{Binding Path=HorizontalOffset, Mode=OneWay, RelativeSource={RelativeSource TemplatedParent, AncestorType={x:Null}}}" AutomationProperties.AutomationId="HorizontalScrollBar"/>
</Grid>
</ControlTemplate>
<LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" EndPoint="1,0.5" StartPoint="0,0.5">
<GradientStop Color="#FFBFF359" Offset="0"/>
<GradientStop Color="#FFFFFFFF" Offset="1"/>
</LinearGradientBrush>
</Window.Resources>
<Window.Background>
<LinearGradientBrush EndPoint="0.794,0.98" StartPoint="0.206,0.02">
<GradientStop Color="#FFC8D0F4" Offset="0"/>
<GradientStop Color="#FF87B9EA" Offset="1"/>
</LinearGradientBrush>
</Window.Background>
<Grid x:Name="LayoutRoot">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Canvas Margin="8,8,-2,1">
<Rectangle Fill="#FFFFFFFF" Stroke="{x:Null}" RadiusX="8.5" RadiusY="8.5" HorizontalAlignment="Stretch" Margin="0,0,0,0" Width="188" Height="226"/>
<Rectangle Fill="#FFFFFFFF" Stroke="{x:Null}" RadiusX="8.5" RadiusY="8.5" Margin="0,0,0,0" Width="336" Height="226" Canvas.Left="202"/>
</Canvas>
<Grid DataContext="{Binding Mode=Default, Source={StaticResource kF}, XPath=/rss/channel/item}" Margin="0,0,-2,1" x:Name="feedGrid">
<ListBox HorizontalAlignment="Left" Margin="19,38,0,17" x:Name="feedListBox" ItemTemplate="{DynamicResource itemTemplate}" IsSynchronizedWithCurrentItem="True" SelectedIndex="0" d:LayoutOverrides="VerticalAlignment" Width="168" ItemsSource="{Binding Mode=OneWay}"/>
<TextBox Margin="242,11,20,0" x:Name="txtTitle" VerticalAlignment="Top" BorderBrush="{x:Null}" FontSize="16" FontWeight="Bold" Text="{Binding Mode=OneWay, XPath=title}" TextWrapping="NoWrap">
<TextBox.Foreground>
<LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
<GradientStop Color="#FF4A9934" Offset="0.635"/>
<GradientStop Color="#FF5BC73D" Offset="1"/>
</LinearGradientBrush>
</TextBox.Foreground>
</TextBox>
<ScrollViewer Margin="241,43.28,20,17" Content="{Binding Mode=Default, XPath=description}" ContentTemplate="{DynamicResource descriptionTemplate}"/>
<Image HorizontalAlignment="Left" Margin="20,16,0,0" VerticalAlignment="Top" Width="16" Height="16" Source="feed.png" Stretch="Fill"/>
<TextBox HorizontalAlignment="Left" Margin="39,11,0,0" VerticalAlignment="Top" Width="148" Height="23" BorderBrush="{x:Null}" FontSize="14" FontWeight="Bold" Foreground="#FFFF5900" Text="kForum Updates" TextWrapping="Wrap"/>
<Image HorizontalAlignment="Left" Margin="222,18,0,0" VerticalAlignment="Top" Width="16" Height="16" Source="page_white_go.png" Stretch="Fill"/>
</Grid>
</Grid>
</Window>
Cheers!
Kirupa :cap: