2010-08-30 19 views
5

Ok, tôi không chắc mình hiểu cách thức này sẽ hoạt động, nhưng trong ứng dụng của tôi, tôi đã chặn một cử chỉ chính (Ctrl + K) thành RoutedCommand. Không có vấn đề mà tôi tập trung vào ứng dụng của tôi, tổ hợp phím hoạt động, ngoại trừ nếu tôi sử dụng nó bên trong một WindowsFormsHost có chứa một điều khiển trình duyệt web. Tôi đã thử chụp sự kiện PreviewKeyDown để kiểm soát trình duyệt web và thiết lập IsInputKey thành false. Điều này, theo lý thuyết, khiến cho Chủ nhà xem xét các cử chỉ quan trọng không được điều trị và gửi nó lên trên, nhưng điều đó không xảy ra.WPF WindowsFormsHost không bong bóng lên các cử chỉ chính không được xử lý

UPDATE:

Nếu tôi ghi đè của kiểm soát bool IsInputKey (Keys keyData) và trả về false, nó hoạt động và các lệnh được thực hiện như mong muốn.

Có thể có điều gì đó sai trái trong cách tôi xử lý PreviewKeyDown?

private void browser_PreviewKeyDown (object sender, PreviewKeyDownEventArgs e) 
{ 
    e.IsInputKey = false; 
} 

Tôi mong đợi điều này cho phép tôi chụp bất kỳ tổ hợp phím nào từ cửa sổ chính của mình. Tôi muốn sửa lỗi này với xử lý sự kiện hơn là mở rộng điều khiển ...

Trả lời

0

Nếu tôi hiểu chính xác, bạn muốn ngăn chặn việc gõ phím được xử lý bởi Biểu mẫu được lưu trữ. Tuy nhiên, mã ví dụ của bạn chỉ ra rằng bạn cố gắng xử lý nó bên trong điều khiển được lưu trữ.

Để xử lý các sự kiện đường hầm, bạn xử lý tốt hơn "bên ngoài" điều khiển được lưu trữ, trong cây thị giác WPF. Bạn có thể - ví dụ - xử lý nó như sau:

<Grid PreviewKeyDown="Grid_PreviewKeyDown" PreviewMouseDown="Grid_PreviewMouseDown" Height="250" Width="250"> 
    <WindowsFormsHost Name="windowsFormsHost1"> 
     <wf:Form1 TopLevel="False" /> 
    </WindowsFormsHost> 
</Grid> 

Bằng cách đặt sự kiện này như xử lý như sau, nó ngăn cản rằng sự kiện này là tuyên truyền hơn nữa xuống cây thị giác:

private void Grid_PreviewKeyDown(object sender, KeyEventArgs e) 
{ 
    e.Handled = true; 
} 
Các vấn đề liên quan