Копирование / вставка связок клавиш не работает
У меня есть следующие привязки клавиш в моем главном окне:
<KeyBinding Command="{Binding OpenCommand}" Gesture="Ctrl+O"/>
<KeyBinding Command="{Binding SaveCommand}" Gesture="Ctrl+S"/>
<KeyBinding Command="{Binding CopyCommand}" Gesture="Ctrl+C"/>
<KeyBinding Command="{Binding PasteCommand}" Gesture="Ctrl+V"/>
<KeyBinding Command="{Binding CutCommand}" Gesture="Ctrl+X"/>
И сохранить комбинации клавиш работают нормально... остальные ничего не делают, когда я нажимаю комбинацию клавиш. В выходных данных нет ошибок привязки. У меня также есть кнопки в меню, связанные с теми же командами, и они работают. Существует ли проблема с использованием команд, имеющих метод CanExecute, связанный с ними? Я использую .Net 4.0. Есть идеи, почему действия буфера обмена не будут работать?
Обновление: Если я свяжу что-то еще (например, OpenCommand) для Ctrl+C это работает. Если я привяжу подражание к другому жесту, это все равно не сработает. Так что, похоже, это проблема с командой. Хотя это странно, потому что моя кнопка копирования отлично работает, привязанная к той же команде копирования. Вот код подражания, к которому он привязан:
public ICommand CopyCommand
{
get
{
if (this.copyCommand == null)
{
this.copyCommand = new RelayCommand(
param => this.Copy(),
param => this.Copy_CanExecute());
}
return this.copyCommand;
}
}
3 ответа:
Вы можете выполнять только команды, где
Другой возможной причиной является локальная обработка соответствующих жестов, как это делается по умолчанию. Вы можете переопределить это, повторно объявивCanExecute
возвращаетtrue
, может быть одной из причин, почему они не выполняются.KeyBindings
локально с помощью своей собственной команды.
Это прекрасно работает. В моем главном окне.xaml-файл, я добавляю две команды привязки клавиш для иллюстрации
<Window x:Class="MainWindowCommandBinding.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="MainWindow" Height="350" Width="525"> <Window.InputBindings> <KeyBinding Command="{Binding OpenCommand}" Gesture="Ctrl+O"/> <!--<KeyBinding Command="{Binding SaveCommand}" Gesture="Ctrl+S"/>--> <KeyBinding Command="{Binding CopyCommand}" Gesture="Ctrl+C"/> <!--<KeyBinding Command="{Binding PasteCommand}" Gesture="Ctrl+V"/> <KeyBinding Command="{Binding CutCommand}" Gesture="Ctrl+X"/>--> </Window.InputBindings> <Grid> </Grid> </Window>
В моем главном окне.код XAML.cs-файл, я инициализирую свой DataContext следующим образом.
public MainWindow() { InitializeComponent(); DataContext = new MainWindowContext(); }
Класс MainWindowContext определяется следующим образом
class MainWindowContext { RelayCommand _openCommand; public ICommand OpenCommand { get { if (_openCommand == null) { _openCommand = new RelayCommand( param => this.Open(), param => this.Open_CanExecute()); } return _openCommand; } set { _openCommand = (RelayCommand) value; } } RelayCommand _copyCommand; public ICommand CopyCommand { get { if (_copyCommand == null) { _copyCommand = new RelayCommand( param => this.Copy(), param => this.Copy_CanExecute()); } return _copyCommand; } set { _copyCommand = (RelayCommand)value; } } private bool Copy_CanExecute() { return true; } private object Copy() { Console.Out.WriteLine("Copy command executed"); return null; } private bool Open_CanExecute() { return true; } private object Open() { Console.Out.WriteLine("Open command executed"); return null; } }
Когда я выполняю, это работает нормально. Вы можете видеть, какая команда была выполнена в вашей консоли. Пожалуйста, скажите мне, если я что-то упущу.