<Application x:Class="Microsoft.Samples.WinFX.AlarmClock.MyApp"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="AppStartup"
>
</Application>
//File:Window.xaml.cs
using System;
using System.Windows;
using System.Data;
using System.Xml;
using System.Configuration;
using System.Windows.Media;
namespace Microsoft.Samples.WinFX.AlarmClock
{
public partial class MyApp : Application
{
void AppStartup(object sender, StartupEventArgs e)
{
}
}
}
Store the variable in the application and get it back
<Window x:Class="BookApp.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="BookApp" Height="300" Width="300">
<Grid>
<Button Click="MyClickEvent"
VerticalAlignment="Top"
HorizontalAlignment="Stretch"
Grid.Column="0"
Grid.ColumnSpan="1"
Grid.Row="0"
Grid.RowSpan="1"
Name="btnGo">Go</Button>
</Grid>
</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;
namespace BookApp
{
public partial class Window1 : System.Windows.Window
{
public Window1()
{
InitializeComponent();
Book x = new Book();
x.author = "Author";
x.title = "Title";
x.price = (decimal)9.99;
Application.Current.Properties["Book"] = x;
}
private void MyClickEvent(object sender, RoutedEventArgs e)
{
Book y = (Book)Application.Current.Properties["Book"];
MessageBox.Show(y.title, y.author, MessageBoxButton.OK,MessageBoxImage.Hand);
}
}
public class Book
{
public decimal price;
public string title;
public string author;
}
}
Application.Current.Windows stores all windows you created
<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;
}
}
}
}
Application.Current.ShutdownMode
<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
//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
<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
<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>

