<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>