Windows Presentation FoundationDawid Cieszyńskicieszak@cieszak.eu
AgendaCo to jest? Do czego służy?Porównanie z Windows FormsJęzyk XAML i przykłady koduData Binding i Update TriggerExpression BlendNowe kontrolki w WPF?Podsumowanie
Co to jest?Windows Presentation Foundation(System.Windows.*)Windows CardSpaceWindows CommunicationFoundation(System.ServiceModel.*)Windows Workflow Foundation(System.Workflow.*)
Do czego służy?
Co to jest?Nowa estetyka Windows VistaTransformacje, animacje, przezroczystość, cieniowanie, efekty trójwymiarowe, itp.StyleWyzwalacze
WPF vs Windows Forms
XAMLC#VB.NET<Button Width="100"> OK  <Button.Background>LightBlue  </Button.Background></Button>Button b1 = new Button();b1.Content = "OK";b1.Background = new SolidColorBrush(Colors.LightBlue);b1.Width = 100;Dim b1 As New Buttonb1.Content = "OK"b1.Background = New _SolidColorBrush(Colors.LightBlue)b1.Width = 100XAML = ExtensibleApplicationMarkupLanguageHTML?
Przykłady kodu XAML
App.xaml<Application x:Class="WpfApplication1.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"StartupUri="MainWindow.xaml"><Application.Resources>   </Application.Resources></Application>
MainWindow.xaml<Window x:Class="WpfApplication1.Window1"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"Title="Window1" Height="300" Width="300"><Grid></Grid></Window>
LayoutDockPanelStackPanelGridCanvas
Przykład XAML<Rectangle Fill="Red„Width="150„Height="100" />
Przykład XAML<Grid ShowGridLines="True"><Grid.ColumnDefinitions><ColumnDefinition /><ColumnDefinition /></Grid.ColumnDefinitions><Grid.RowDefinitions><RowDefinition/><RowDefinition /></Grid.RowDefinitions><Rectangle Fill="Red" Width="150" Height="100„Grid.Column="1"Grid.Row="1"/></Grid>
Przykład XAML<Button Height="25" Width="100"Grid.Column="0„Grid.Row="0" Click="Button_Click"/><Rectangle x:Name="rect" Fill="Red"Width="150" Height="100"Grid.Column="1"Grid.Row="1"/>privatevoidButton_Click(object sender, RoutedEventArgs e){rect.Fill= newSolidColorBrush(Colors.Blue);}
Przykład XAML<Rectangle x:Name="rect" Width="150" Height="100"Grid.Column="1"Grid.Row="1"><Rectangle.Fill><LinearGradientBrush><GradientStop Offset="0" Color="LightBlue" /><GradientStop Offset="0.4" Color="Blue" /><GradientStop Offset="0.8" Color="Purple" /><GradientStop Offset="1.0" Color="Lavender"/></LinearGradientBrush></Rectangle.Fill></Rectangle>
Przykład XAML<TextBlockFontFamily="Verdana" FontSize="72„FontStyle="Italic" FontWeight="Bold" >    KOALA<TextBlock.Foreground><ImageBrushImageSource="Koala.jpg" /></TextBlock.Foreground></TextBlock>
Przykład XAML<TextBlock Text="Click to win!" TextDecorations="None"Cursor="Hand" FontSize="14" FontWeight="Bold"MouseEnter="TextBlock_MouseEnter" MouseLeave="TextBlock_MouseLeave" MouseLeftButtonUp="TextBlock_MouseLeftButtonUp" />privatevoidTextBlock_MouseEnter(object sender, MouseEventArgs e){    ((TextBlock)sender).TextDecorations = TextDecorations.Underline;    ((TextBlock)sender).Foreground = Brushes.Maroon;}privatevoidTextBlock_MouseLeave(object sender, MouseEventArgs e){    ((TextBlock)sender).TextDecorations = null;    ((TextBlock)sender).Foreground = Brushes.Black;}privatevoidTextBlock_MouseLeftButtonUp(object sender, MouseButtonEventArgs e){MessageBox.Show("Congratulations!");}
Style<Application.Resources><StyleTargetType="Button" x:Key="GelButton"><Setter Property="Margin" Value="1,2,1,2"/><Setter Property="HorizontalAlignment„Value="Left"/><Setter Property="Template"><Setter.Value>                ...</Setter.Value></Setter></Style></Application.Resources><Button Height="50" Width="250"	Style="{StaticResource GelButton}" Content="Button 1"/>
Style<Application.Resources><StyleTargetType="Button"><Setter Property="Margin" Value="1,2,1,2"/><Setter Property="HorizontalAlignment„Value="Left"/><Setter Property="Template"><Setter.Value>                ...</Setter.Value></Setter></Style></Application.Resources><Button Height="50" Width="250"Content="Button 1"/>
Data BindingManaged ObjectADO.NET Data SourceXML Data
Data Binding
Tryby BindowaniaOneWayTwoWayOneWayToSourceOneTimeCelŹródło
Bindowanie do obiektunamespace MyNamespace{classMyClass    {publicstring ColorName        {get { return"Red"; }        }    }}<DockPanel xmlns:c="clr-namespace:MyNamespace"><DockPanel.Resources><c:MyClass x:Key="mySource" /></DockPanel.Resources><ButtonBackground="{Binding Path=ColorName,Source={StaticResourcemySource}}">        ...</Button> </DockPanel>
Bindowanie<DockPanel xmlns:c="clr-namespace:MyNamespace"><DockPanel.Resources>...</DockPanel.Resources><DockPanel.DataContext><Binding Source="{StaticResource mySource}"/></DockPanel.DataContext><Button Background="{Binding Path=BackColorName}">        ...</Button><TextBox Foreground="{Binding Path=ForeColorName}">        ...</TextBox></DockPanel>
UpdateTrigger<TextBox Width="100"><TextBox.Text><Binding Source="{StaticResource myData}" Path="ColorName"UpdateSourceTrigger="PropertyChanged" /></TextBox.Text></TextBox>Kiedy ma następować aktualizacja?Default
Explicit
LostFocus
PropertyChangedUpdateTrigger - przykład<Label>Enter a Name:</Label><TextBox><TextBox.Text><BindingSource="{StaticResource myDataSource}"	Path="Name"	UpdateSourceTrigger= "PropertyChanged" /></TextBox.Text></TextBox><Label>The name you entered:</Label><TextBlock Text="{Binding Source= {StaticResourcemyDataSource}, Path = Name}"/><TextBox Name="itemNameTextBox" Text="{Binding Path=ItemName, UpdateSourceTrigger=Explicit}" />//itemNameTextBox is an instance of a TextBoxBindingExpressionbe = 	itemNameTextBox.GetBindingExpression(TextBox.TextProperty);be.UpdateSource();
DataTemplate<DataTemplate x:Key="myTaskTemplate"><Border Name="border" BorderBrush="Aqua"	BorderThickness="1" Padding="5" Margin="5"><Grid><Grid.RowDefinitions><RowDefinition/><RowDefinition/><RowDefinition/></Grid.RowDefinitions><Grid.ColumnDefinitions><ColumnDefinition /><ColumnDefinition /></Grid.ColumnDefinitions><TextBlockGrid.Row="0"Grid.Column="0" Text="Task Name:"/><TextBlock Grid.Row="0" Grid.Column="l" Text="{BindingPath=TaskName}"/><TextBlock Grid.Row="1" Grid.Column="0" Text="Description:" /><TextBlock Grid.Row="1"Grid.Column="1" Text="{Binding Path.Description}" /><TextBlock Grid.Row="2"Grid.Column="0"Text="Priority:" /><TextBlock Grid.Row="2" Grid.Column="1" Text="{BindingPath=Priority}" /></Grid></Border></DataTemplate><ListBox Width="400" Margin="10" ItemsSource="{Binding Source={StaticResource myTodoList}}"ItemTemplate="{StaticResource myTaskTemplate}" HorizontalContentAlignment="Stretch"/>
<Border Width="400"         BorderBrush="Green"         BorderThickness="9">  <StackPanel><MediaElement Source="aero.wmv" />    <Button>Hello</Button>  </StackPanel></Border>Audio i WideoRonnie Saurenmann (WPF)Różne formaty: WMV, MPEG, Some AVIsSynchronizacha z animacjami
Grafika 2D, Grafika 3D, ObrazyRonnie Saurenmann (WPF)Grafika 2DGrafika 3DObrazy
Transformacja i animacjaRotateTransformScaleTransformRenderTransformEfekty: rozmycie, poświataZmiana każdej właściwości w czasie
Dokumenty, drukowanieUżycie kontrolek Windows FormsXAML Browser Applications (XBAPs)Co jeszcze?
Expression Blend
Nowe kontrolkiDatagrid, Ribbon, Visual State ManagerWPF Toolkit:http://wpf.codeplex.com/Office UI Licensing Developer Center:http://msdn.microsoft.com/hr-hr/office/aa973809(en-us).aspx
DemoRibbon

Windows Presentation Foundation