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