Я нашел пользовательский пример перенаправленной команды из Примеры Microsoft , он хорошо работает.
<Window x:Class="CustomRoutedCommand.MainWindow"
...
xmlns:local="clr-namespace:CustomRoutedCommand">
<Window.CommandBindings>
<CommandBinding Command="{x:Static local:MainWindow.ColorCmd}"
Executed="ColorCmdExecuted"
CanExecute="ColorCmdCanExecute"/>
</Window.CommandBindings>
void ColorCmdExecuted(object sender, ExecutedRoutedEventArgs e)
, void ColorCmdCanExecute(object sender, CanExecuteRoutedEventArgs e)
определены в MainWindow.cs .
Как изменить XAML, если я переместу эти два обработчика в xxxx.cs ?
Редактировать, добавить дополнительную информацию
Обработчики команд определены в MainWindow.cs , я вырезал и вставил код в другой файл, как показано ниже, затем компиляция идет с ошибкой. Ошибка CS1061 «MainWindow» не содержит определения для «ColorCmdExecuted»
// xxxx.cs
namespace CustomRoutedCommand
{
public class xxxx
{
// ExecutedRoutedEventHandler for the custom color command.
private void ColorCmdExecuted(object sender, ExecutedRoutedEventArgs e)
{
var target = e.Source as Panel;
if (target != null)
{
target.Background = target.Background == Brushes.AliceBlue ? Brushes.LemonChiffon : Brushes.AliceBlue;
}
}
// CanExecuteRoutedEventHandler for the custom color command.
private void ColorCmdCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
if (e.Source is Panel)
{
e.CanExecute = true;
}
else
{
e.CanExecute = false;
}
}
}
}