Mega Code Archive

 
Categories / C# / WPF
 

Create a custom RoutedCommand, the CommandBinding objects, and the KeyBinding objects in code

<Window x:Class="WpfApplication1.Window1"     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"     xmlns:custom="clr-namespace:WpfApplication1"     Title="Custom RoutedCommand Sample"     Name="RootWindow" Height="500" Width="600"     Focusable="True">   <Window.CommandBindings>     <CommandBinding Command="{x:Static custom:Window1.ColorCmd}"                     Executed="ColorCmdExecuted"                     CanExecute="ColorCmdCanExecute"/>   </Window.CommandBindings>   <DockPanel>     <Menu DockPanel.Dock="Top" Height="25">       <MenuItem Header="Commands">         <MenuItem Header="Color Command" Command="{x:Static custom:Window1.ColorCmd}" />       </MenuItem>     </Menu>     <Border BorderBrush="Black" BorderThickness="1" Margin="10"             Height="165" Width="250" DockPanel.Dock="Top">       <TextBlock TextWrapping="Wrap" Margin="3">         a         <LineBreak/>         b         <LineBreak/>         <LineBreak/>         c         <LineBreak/>       </TextBlock>     </Border>     <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" DockPanel.Dock="Bottom">       <Border BorderBrush="Black" BorderThickness="1" Height="200" Width="200">         <StackPanel Name="FirstStackPanel" Background="AliceBlue" Focusable="True">           <StackPanel.CommandBindings>             <CommandBinding Command="{x:Static custom:Window1.ColorCmd}" Executed="ColorCmdExecuted" CanExecute="ColorCmdCanExecute"/>           </StackPanel.CommandBindings>           <Label>StackPanel</Label>           <Button Command="{x:Static custom:Window1.ColorCmd}"                   CommandParameter="ButtonOne"                   CommandTarget="{Binding ElementName=FirstStackPanel}"                    Content="CommandTarget = FristStackPanel" />         </StackPanel>       </Border>       <Border BorderBrush="Black" BorderThickness="1" Height="200" Width="200">         <StackPanel Background="AliceBlue" Focusable="True">           <Label>Second StackPanel</Label>         </StackPanel>       </Border>     </StackPanel>   </DockPanel> </Window> //File:Window.xaml.cs using System; using System.Windows; using System.Windows.Controls; using System.Windows.Media; using System.Windows.Input; namespace WpfApplication1 {     public partial class Window1 : Window     {         public static RoutedCommand ColorCmd = new RoutedCommand();         public Window1()         {             InitializeComponent();         }         private void ColorCmdExecuted(object sender, ExecutedRoutedEventArgs e)         {             Panel target = e.Source as Panel;             if (target != null)             {                 if (target.Background == Brushes.AliceBlue)                 {                     target.Background = Brushes.Red;                 }                 else                 {                     target.Background = Brushes.AliceBlue;                 }             }         }         private void ColorCmdCanExecute(object sender, CanExecuteRoutedEventArgs e)         {             if (e.Source is Panel)             {                 e.CanExecute = true;             }             else             {                 e.CanExecute = false;             }         }     } }