RoutedEvents: Key Modifiers


   
  
<Window x:Class="RoutedEvents.KeyModifiers"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="KeyModifiers" Height="300" Width="300">
  <StackPanel Margin="5">
    <TextBox KeyDown="KeyEvent"></TextBox>
    <TextBlock Name="lblInfo"></TextBlock>
    <Button Click="CheckShift">Check Current Shift State</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;

namespace RoutedEvents
{
    public partial class KeyModifiers : System.Windows.Window
    {
        public KeyModifiers()
        {
            InitializeComponent();
        }

        private void KeyEvent(object sender, KeyEventArgs e)
        {
            
            lblInfo.Text = "Modifiers: " + e.KeyboardDevice.Modifiers.ToString();

            if ((e.KeyboardDevice.Modifiers &amp; ModifierKeys.Control) == ModifierKeys.Control)
            {
                lblInfo.Text += "
You held the Control key.";                   
            }
        }

        private void CheckShift(object sender, RoutedEventArgs e)
        {
            if (Keyboard.IsKeyDown(Key.LeftShift))
            {
                lblInfo.Text = "The left Shift is held down.";                   
            }
            else
            {
                lblInfo.Text = "The left Shift is not held down.";                   
            }
            
        }
    }
}

   
    
     


RoutedEvents: Key Press Events


   
  
<Window x:Class="RoutedEvents.KeyPressEvents"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="KeyPressEvents" Height="400" Width="400" >
    <StackPanel>
          <DockPanel Margin="5">
            <TextBlock Margin="3" >Type here:</TextBlock>
            <TextBox PreviewKeyDown="KeyEvent" KeyDown="KeyEvent" 
                     PreviewKeyUp="KeyEvent" KeyUp="KeyEvent"
                     PreviewTextInput="TextInput"
                     TextChanged="TextChanged"></TextBox>
          </DockPanel>
      <ListBox Margin="5" Name="lstMessages"></ListBox>
      <CheckBox Margin="5" Name="chkIgnoreRepeat">Ignore Repeated Keys</CheckBox>
      <Button Click="cmdClear_Click" HorizontalAlignment="Right">Clear List</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;

namespace RoutedEvents
{
    public partial class KeyPressEvents : System.Windows.Window
    {
        public KeyPressEvents()
        {
            InitializeComponent();
        }
                
        private void KeyEvent(object sender, KeyEventArgs e)
        {
            if ((bool)chkIgnoreRepeat.IsChecked &amp;&amp; e.IsRepeat) return;
            
            string message = "Event: " + e.RoutedEvent + " " + " Key: " + e.Key;
            lstMessages.Items.Add(message);            
        }

        private void TextInput(object sender, TextCompositionEventArgs e)
        {
            string message = "Event: " + e.RoutedEvent + " " + " Text: " + e.Text;
            lstMessages.Items.Add(message);
        }

        private void TextChanged(object sender, TextChangedEventArgs e)
        {
            string message = "Event: " + e.RoutedEvent;
            lstMessages.Items.Add(message);
        }

        private void cmdClear_Click(object sender, RoutedEventArgs e)
        {            
            lstMessages.Items.Clear();
        }
    }
}

   
    
     


RoutedEvents: Key Press Events


   
  
<Window x:Class="RoutedEvents.KeyPressEvents"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="KeyPressEvents" Height="400" Width="400" >
    <StackPanel>
          <DockPanel Margin="5">
            <TextBlock Margin="3" >Type here:</TextBlock>
            <TextBox PreviewKeyDown="KeyEvent" KeyDown="KeyEvent" 
                     PreviewKeyUp="KeyEvent" KeyUp="KeyEvent"
                     PreviewTextInput="TextInput"
                     TextChanged="TextChanged"></TextBox>
          </DockPanel>
      <ListBox Margin="5" Name="lstMessages"></ListBox>
      <CheckBox Margin="5" Name="chkIgnoreRepeat">Ignore Repeated Keys</CheckBox>
      <Button Click="cmdClear_Click" HorizontalAlignment="Right">Clear List</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;

namespace RoutedEvents
{
    public partial class KeyPressEvents : System.Windows.Window
    {
        public KeyPressEvents()
        {
            InitializeComponent();
        }
                
        private void KeyEvent(object sender, KeyEventArgs e)
        {
            if ((bool)chkIgnoreRepeat.IsChecked &amp;&amp; e.IsRepeat) return;
            
            string message = "Event: " + e.RoutedEvent + " " + " Key: " + e.Key;
            lstMessages.Items.Add(message);            
        }

        private void TextInput(object sender, TextCompositionEventArgs e)
        {
            string message = "Event: " + e.RoutedEvent + " " + " Text: " + e.Text;
            lstMessages.Items.Add(message);
        }

        private void TextChanged(object sender, TextChangedEventArgs e)
        {
            string message = "Event: " + e.RoutedEvent;
            lstMessages.Items.Add(message);
        }

        private void cmdClear_Click(object sender, RoutedEventArgs e)
        {            
            lstMessages.Items.Clear();
        }
    }
}

   
    
     


RoutedEvents: Mouse Position


   
  



<Window x:Class="RoutedEvents.MousePosition"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MousePosition" Height="300" Width="300">
  <StackPanel>
    <Rectangle Name="rect" MouseMove="MouseMoved" Fill="LightBlue" ></Rectangle>
    <Button Name="cmdCapture" Click="cmdCapture_Click">Capture the Mouse</Button>
    <TextBlock Name="lblInfo"></TextBlock>
  </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;

namespace RoutedEvents
{
    public partial class MousePosition : System.Windows.Window
    {
        public MousePosition()
        {
            InitializeComponent();
        }
        private void cmdCapture_Click(object sender, RoutedEventArgs e)
        {
            this.AddHandler(Mouse.LostMouseCaptureEvent,new RoutedEventHandler(this.LostCapture));
            Mouse.Capture(rect);

            cmdCapture.Content = "Mouse captured";
        }

        private void MouseMoved(object sender, MouseEventArgs e)
        {
            Point pt = e.GetPosition(this);
            lblInfo.Text = String.Format("({0},{1}) in window coordinates",pt.X, pt.Y);            
        }

        private void LostCapture(object sender, RoutedEventArgs e)
        {
            lblInfo.Text = "Lost capture";
            cmdCapture.Content = "Capture the Mouse";
        }
    }
}

   
    
     


RoutedEvents Only Numbers


   
  


<Window x:Class="RoutedEvents.OnlyNumbers"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Only Numbers" Height="300" Width="300">
    <StackPanel Margin="5" PreviewTextInput="pnl_PreviewTextInput" PreviewKeyDown="pnl_PreviewKeyDown">
        <TextBox Margin="3" AcceptsTab="False"></TextBox>
        <TextBox Margin="3"></TextBox>
        <TextBox Margin="3"></TextBox>
    </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;

namespace RoutedEvents
{
    public partial class OnlyNumbers : System.Windows.Window
    {
        public OnlyNumbers()
        {
            InitializeComponent();
        }
        private void pnl_PreviewTextInput(object sender, TextCompositionEventArgs e)
        {
            short val;
            if (!Int16.TryParse(e.Text, out val))
            {
                e.Handled = true;
            }            
        }

        private void pnl_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Space)
            {
                e.Handled = true;
            }
        }
    }
}

   
    
     


Get RoutedEvent Name


   
  


<Window
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Class="WpfApplication1.Window1"
    Title="Routed Events" Height="400" Width="800">
  
    <Grid Name="contentGrid" Background="Red">
        <Rectangle Name="clickMeRectangle" 
                   Height="70" 
                   Width="70" 
                   Stroke="Black" 
                   Fill="CadetBlue" />
        <Button Name="clickMeButton" 
                Height="23" 
                HorizontalAlignment="Right" 
                VerticalAlignment="Top" 
                Width="70" 
                PreviewMouseDown="Generic_MouseDown" 
                Click="clickMeButton_Click">Click Me</Button>
        <TextBlock Name="outputText" />
    </Grid>
</Window>

//File:Window.xaml.cs
using System;
using System.Collections.Generic;
using System.Linq;
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.Navigation;
using System.Windows.Shapes;

namespace WpfApplication1
{
    public partial class Window1 : Window
    {
        private void Generic_MouseDown(object sender, MouseButtonEventArgs e)
        {
            Console.WriteLine(outputText.Text);
            Console.WriteLine(e.RoutedEvent.Name);
            Console.WriteLine(sender.ToString());
            Console.WriteLine(((FrameworkElement)e.Source).Name);
        }

        private void Window_MouseUp(object sender, MouseButtonEventArgs e)
        {
            outputText.Text = outputText.Text;
        }

        private void clickMeButton_Click(object sender, RoutedEventArgs e)
        {
            outputText.Text = "Button clicked:" + outputText.Text;
        }
    }
}

   
    
     


Bind event handler to button with RoutedEventHandler


   
  

<Window
  x:Class="WpfApplication1.StackPanelDemo"
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  Title="Stack Panel Demo">
  <StackPanel>
    <Button x:Name="canvasButton">Canvas Demo</Button>
  </StackPanel>
</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.Shapes;


namespace WpfApplication1 {
  public partial class StackPanelDemo : Window {
    public StackPanelDemo() {
      InitializeComponent();

      this.canvasButton.Click += new RoutedEventHandler(canvasButton_Click);
    }

    void canvasButton_Click(object sender, RoutedEventArgs e) {
      Console.WriteLine("clicked");
    }
  }
}