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;
}
}
}
}
Related examples in the same category