2009-03-22 131 views
7

Tôi muốn tắt tất cả các phím tắt mặc định trong Hộp văn bản WPF. Các phím tắt như Ctrl + Một, Ctrl +V, Ctrl +C vv này có thể được thực hiện ?. Dường như với tôi rằng các phím tắt này được thực thi trước KeyDown sự kiệnCách tắt các phím tắt trong Hộp văn bản WPF

+0

Hết sức tò mò: Tại sao? –

+0

Vì tôi đang thực hiện một điều khiển cho phép người dùng chỉ định bất kỳ phím tắt nào mà anh muốn sử dụng cho một số hành động. Và tất nhiên tôi không cần phải chọn tất cả mọi thứ trên Ctrl + A, nhưng thay vào đó tôi sẽ chỉ hiển thị nó –

+0

Ah. Tôi đã mong đợi WPF cung cấp một điều khiển đã làm một cái gì đó tương tự rồi. Cảm ơn bạn về thông tin. –

Trả lời

3

Bạn có thể chặn tổ hợp phím trong sự kiện PreviewKeyDown. Đặt thành viên e.Handled thành true và điều đó sẽ ngăn việc xử lý khóa thực sự.

+0

Cảm ơn. Đúng vậy. Không bao giờ thấy sự kiện xem trước này trước –

+0

Điều đó sẽ chỉ hoạt động đối với các lần nhấn phím. Điều gì nếu lệnh được gọi thông qua menu ngữ cảnh? Hoặc menu ứng dụng? –

+0

@Kent, I * believe * rằng thông qua các lệnh WPF. Tôi rất không quen thuộc với việc triển khai và không thể cung cấp bất kỳ nhận xét hữu ích nào về cách hoạt động của nó. Mặc dù tôi rất muốn thấy ai đó làm như vậy. – JaredPar

3
public Window1() 
{ 
    InitializeComponent(); 
    CommandManager.AddPreviewCanExecuteHandler(_textBox, _canExecute); 
} 

private void _canExecute(object sender, CanExecuteRoutedEventArgs e) 
{ 
    e.CanExecute = false; 
    e.Handled = true; 
} 

trên sẽ ngăn chặn sự TextBox từ nói rằng nó có thể xử lý bất kỳ lệnh. Bạn có thể chọn lọc những lệnh nào bạn muốn vô hiệu hóa bằng cách kiểm tra EventArgs. Hoặc bạn có thể làm điều này trong XAML:

<TextBox x:Name="_textBox"> 
    <TextBox.CommandBindings> 
     <CommandBinding Command="ApplicationCommands.Copy" CanExecute="_canExecute"/> 
    </TextBox.CommandBindings> 
</TextBox> 

Ở đây chúng tôi chỉ vô hiệu hóa việc thực thi lệnh Sao chép. Control-C sẽ không hoạt động, cũng như menu ngữ cảnh hoặc menu chính. Trong thực tế, bất kỳ điều khiển nào thực hiện lệnh Sao chép sẽ bị tắt nếu tiêu điểm nằm trong số TextBox.

Các vấn đề liên quan