Windows Presentation Foundation2. Agenda Co to jest? Do czego służy? Porównanie z Windows Forms Język XAML i przykłady kodu Data Binding i Update Trigger Expression Blend Nowe kontrolki w WPF? Podsumowanie 3. Co to jest? Windows Presentation Foundation (System.Windows.*) Windows CardSpace Windows Communication Foundation (System.ServiceModel.*) Windows Workflow Foundation (System.Workflow.*) 5. Co to jest? Nowa estetyka Windows Vista Transformacje, animacje, przezroczystość, cieniowanie, efekty trójwymiarowe, itp. Style Wyzwalacze 7. XAML C# 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 Button b1.Content = "OK" b1.Background = New _SolidColorBrush(Colors.LightBlue) b1.Width = 100 XAML = ExtensibleApplicationMarkupLanguage HTML? 9. 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> 13. 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> 14. 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); } 15. 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> 17. 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!"); } 18. 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"/> 19. 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"/> 23. Bindowanie do obiektu namespace 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> 24. 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> 29. 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"/> 30. <Border Width="400" BorderBrush="Green" BorderThickness="9"> <StackPanel> <MediaElement Source="aero.wmv" /> <Button>Hello</Button> </StackPanel> </Border> Audio i Wideo Ronnie Saurenmann (WPF) Różne formaty: WMV, MPEG, Some AVIs Synchronizacha z animacjami 32. Transformacja i animacja RotateTransform ScaleTransform RenderTransform Efekty: rozmycie, poświata Zmiana każdej właściwości w czasie 35. Nowe kontrolki Datagrid, Ribbon, Visual State Manager WPF Toolkit:http://wpf.codeplex.com/ Office UI Licensing Developer Center: http://msdn.microsoft.com/hr-hr/office/aa973809(en-us).aspx 37. Łatwe tworzenie GUI Automagiczne przekazywanie wartości Prostota i funkcjonalność Oddzielenie logiki od wyglądu Zachwyt użytkownika Podsumowanie 38. Dziękuję <Canvas Width="100" Height="100"><Ellipse Fill="Yellow" Stroke="Black" StrokeThickness="7" Width="100" Height="100" /> <Ellipse Fill="Black" Width="10" Height="15" Canvas.Left="28" Canvas.Top="28" /> <Ellipse Fill="Black" Width="10" Height="15" Canvas.Left="62" Canvas.Top="28" /> <Path Stroke="Black" StrokeThickness="6" Data="M 30,60 Q 50,90 70,60" /> </Canvas>