Application.Current.ShutdownMode

image_pdfimage_print


   
  


<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="AppWindowsSample" Height="200" Width="300" 
    xmlns:my="clr-namespace:System;assembly=mscorlib">
  <StackPanel>
    <Menu Name="menu1" >
      <MenuItem Header="Window" x:Name="windowMenu">
        <MenuItem Header="SubmenuOpened event" />
      </MenuItem>
    </Menu>
    <Button Margin="10" Name="newWindowButton" Height="23" VerticalAlignment="Top">New Window</Button>
    <StatusBar Grid.Row="2" Name="statusBar1" >
      <TextBlock x:Name="statusText">Status</TextBlock>
    </StatusBar>
    <Button Height="23" Margin="10" Name="shutdownButton" VerticalAlignment="Top" >Shutdown</Button>
  </StackPanel>
</Window>
//File:Window.xaml.cs

using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Windows.Controls.Primitives;
using System.Diagnostics;
using System.ComponentModel;


namespace WpfApplication1 {
  public partial class Window1 : System.Windows.Window {

    public Window1() {
      InitializeComponent();

      DataContext = Application.Current.Windows;
      statusText.Text = Application.Current.ShutdownMode.ToString();

      newWindowButton.Click += new RoutedEventHandler(newWindowButton_Click);
      shutdownButton.Click += new RoutedEventHandler(shutdownButton_Click);
      windowMenu.SubmenuOpened += new RoutedEventHandler(windowMenu_SubmenuOpened);
      Closing += Window1_Closing;
    }

    public void windowMenu_SubmenuOpened(object sender, RoutedEventArgs e) {
      windowMenu.Items.Clear();
      foreach( Window window in Application.Current.Windows ) {
        MenuItem item = new MenuItem();
        item.Header = window.Title;
        item.Click += windowMenuItem_Click;
        item.Tag = window;
        item.IsChecked = window.IsActive;
        windowMenu.Items.Add(item);
      }
    }

    public void windowMenuItem_Click(object sender, RoutedEventArgs e) {
      Window window = (Window)((MenuItem)sender).Tag;
      window.Activate();
    }

    public void newWindowButton_Click(object sender, RoutedEventArgs e) {
      Window window = new Window();
      window.Title = "Window " + DateTime.Now;
      window.Width = 200;
      window.Height = 100;
      window.Show();
      statusText.Text = Application.Current.ShutdownMode.ToString();
    }

    void shutdownButton_Click(object sender, RoutedEventArgs e) {
      Application.Current.Shutdown();
    }

    void Window1_Closing(object sender, CancelEventArgs e) {
      if( MessageBox.Show("Do you really want to shut down?", "Shutting Down", MessageBoxButton.YesNo) == MessageBoxResult.No ) {
        e.Cancel = true;
      }
    }


  }
}

   
    
     


Implement Application.DoEvents in WPF

image_pdfimage_print






//File:Window.xaml.cs

using System.Windows;
using System.Windows.Threading;

namespace WpfApplication1
{
public partial class Window1 : Window
{
private delegate void EmptyDelegate();
public Window1()
{
InitializeComponent();
}

private void btnWithout_Click(object sender, RoutedEventArgs e)
{
LoadNumbers(false);
}

private void btnWith_Click(object sender, RoutedEventArgs e)
{
LoadNumbers(true);
}

private void LoadNumbers(bool callDoEvents)
{
listBox.Items.Clear();

btnWithout.IsEnabled = false;
btnWith.IsEnabled = false;

for(int i = 1; i <= 10000; i++) { listBox.Items.Add("Number " + i.ToString()); if(callDoEvents){ DoEvents(); } } btnWithout.IsEnabled = true; btnWith.IsEnabled = true; } public static void DoEvents() { Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Background,new EmptyDelegate(delegate{})); } } } [/csharp]

Throw Application event from button click event handler

image_pdfimage_print


   
  

<Window x:Class="PreventSessionEnd.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="PreventSessionEnd" Height="300" Width="300"
    >
    <Grid Margin="5">
      <Button Click="cmdException_Click">Throw an Unhandled Exception</Button>
    </Grid>
</Window>


//File:Window.xaml.cs
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;


namespace PreventSessionEnd
{

    public partial class Window1 : Window
    {

        public Window1()
        {
            InitializeComponent();
        }

        private void cmdException_Click(object sender, RoutedEventArgs e)
        {
            throw new ApplicationException("You clicked a bad button.");                
        }
    }
}

   
    
     


Animation with Discrete Key Frames

image_pdfimage_print


   
     

<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
  <Image Source="c:image.png">
    <Image.Triggers>
      <EventTrigger RoutedEvent="Image.Loaded">
        <EventTrigger.Actions>
          <BeginStoryboard>
            <Storyboard>
              <DoubleAnimation Storyboard.TargetProperty="(Canvas.Left)" From="0" To="500" Duration="0:0:3"/>
              <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Top)" Duration="0:0:3">
                <DiscreteDoubleKeyFrame Value="0" KeyTime="0:0:0"/>
                <DiscreteDoubleKeyFrame Value="200" KeyTime="0:0:1"/>
                <DiscreteDoubleKeyFrame Value="0" KeyTime="0:0:2"/>
              </DoubleAnimationUsingKeyFrames>
            </Storyboard>
          </BeginStoryboard>
        </EventTrigger.Actions>
      </EventTrigger>
    </Image.Triggers>
  </Image>
</Canvas>






     


Animation with Mixed Key Frames.xaml

image_pdfimage_print


   
     
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
  <Image Source="c:image.png">
    <Image.Triggers>
      <EventTrigger RoutedEvent="Image.Loaded">
        <EventTrigger.Actions>
          <BeginStoryboard>
            <Storyboard>
              <DoubleAnimation Storyboard.TargetProperty="(Canvas.Left)" From="0" To="500" Duration="0:0:3"/>
              <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Canvas.Top)" Duration="0:0:3">
                  <DiscreteDoubleKeyFrame Value="0" KeyTime="0:0:0"/>
                  <LinearDoubleKeyFrame Value="200" KeyTime="0:0:1"/>
                  <SplineDoubleKeyFrame KeySpline="0,1,1,0" Value="200" KeyTime="0:0:3"/>
              </DoubleAnimationUsingKeyFrames>
            </Storyboard>
          </BeginStoryboard>
        </EventTrigger.Actions>
      </EventTrigger>
    </Image.Triggers>
  </Image>
</Canvas>






     


Control Animations Through Triggers

image_pdfimage_print


   
     

<Window x:Class="Main"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="" Height="350" Width="400">
  <Window.Resources>
    <Storyboard x:Key="Storyboard" RepeatBehavior="10x">
      <DoubleAnimation Storyboard.TargetName="rect1" Storyboard.TargetProperty="Width" To="250" FillBehavior="HoldEnd" AutoReverse="False" />
      <DoubleAnimation Storyboard.TargetName="rect2" Storyboard.TargetProperty="Width" To="250" AutoReverse="True" />
      <ColorAnimation Storyboard.TargetName="ellipse1" Storyboard.TargetProperty="Fill.(SolidColorBrush.Color)" To="Orange"
        AutoReverse="True" />
    </Storyboard>
  </Window.Resources>

  <Window.Triggers>
    <EventTrigger RoutedEvent="Button.Click" SourceName="btnBegin">
      <BeginStoryboard x:Name="beginStoryboard" Storyboard="{StaticResource Storyboard}" />
    </EventTrigger>
    <EventTrigger RoutedEvent="Button.Click" SourceName="btnPause">
    <PauseStoryboard BeginStoryboardName="beginStoryboard" />
    </EventTrigger>
    <EventTrigger RoutedEvent="Button.Click" SourceName="btnResume">
      <ResumeStoryboard BeginStoryboardName="beginStoryboard" />
    </EventTrigger>
    <EventTrigger RoutedEvent="Button.Click" SourceName="btnStop">
      <StopStoryboard BeginStoryboardName="beginStoryboard" />
    </EventTrigger>

    <EventTrigger RoutedEvent="Button.Click" SourceName="btnSeek">
      <SeekStoryboard BeginStoryboardName="beginStoryboard" Offset="0:0:5" Origin="BeginTime" />
    </EventTrigger>

    <EventTrigger RoutedEvent="Button.Click" SourceName="btnSkipToFill">
      <SkipStoryboardToFill BeginStoryboardName="beginStoryboard" />
    </EventTrigger>
    <EventTrigger RoutedEvent="Button.Click" SourceName="btnDoubleSpeed">
      <SetStoryboardSpeedRatio BeginStoryboardName="beginStoryboard" SpeedRatio="2" />
    </EventTrigger>

    <EventTrigger RoutedEvent="Button.Click" SourceName="btnHalfSpeed">
      <SetStoryboardSpeedRatio BeginStoryboardName="beginStoryboard" SpeedRatio="0.5" />
    </EventTrigger>

  </Window.Triggers>
  <Grid>
    <StackPanel>
      <Rectangle x:Name="rect1" Width="50" Height="100" Stroke="Black" Fill="CornflowerBlue" Margin="5" />
      <Ellipse x:Name="ellipse1" Width="50" Height="50" Stroke="Black" Fill="Firebrick" StrokeThickness="1" Margin="5" />
      <Rectangle x:Name="rect2" Width="50" Height="100" Stroke="Black" Fill="CornflowerBlue" Margin="5" />
    </StackPanel>
    <StackPanel Orientation="Horizontal">
        <Button x:Name="btnBegin" Content="Begin" />
        <Button x:Name="btnPause" Content="Pause" />
        <Button x:Name="btnResume" Content="Resume" />
        <Button x:Name="btnStop" Content="Stop" />
        <Button x:Name="btnSeek" Content="Seek" />
        <Button x:Name="btnSkipToFill" Content="Skip To Fill" />
        <Button x:Name="btnDoubleSpeed" Content="Double Speed" />
        <Button x:Name="btnHalfSpeed" Content="Half Speed" />
    </StackPanel>    
  </Grid>
</Window>






     


Animate the Color of a Brush with Indirect Property Targeting

image_pdfimage_print


   
     
<Window x:Class="Main"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="" Height="300" Width="300"
  Background="Black">
  <Window.Triggers>
    <EventTrigger RoutedEvent="Window.Loaded">
      <BeginStoryboard>
        <Storyboard AutoReverse="True" RepeatBehavior="Forever">
          <ColorAnimation Storyboard.TargetProperty="Background.Color" To="White" />
          <ColorAnimation Storyboard.TargetName="bd" Storyboard.TargetProperty="Background.(SolidColorBrush.Color)" To="Black" />
        </Storyboard>
      </BeginStoryboard>
    </EventTrigger>
  </Window.Triggers>
  <Border x:Name="bd" Margin="20" Background="HotPink">
    <Rectangle x:Name="rect" Width="100" Height="100" Fill="WhiteSmoke" />
  </Border>
</Window>