[英]Unable to cast object of type 'System.Windows.Controls.Grid' to type 'System.Windows.Controls.TabItem'
[英]Getting keyboard input to a control based on a WPF Grid (System.Windows.Controls.Grid)
我創建了一個從 WPF System.Windows.Controls.Grid 繼承的控件。
我希望它響應按鍵,但它沒有。
它可以很好地響應鼠標輸入。
這是我的部分構造函數:
public ChDynamicGridProgrammer() : base()
{
MouseLeftButtonDown += ChDynamicGridProgrammer_MouseLeftButtonDown_EventHandler;
MouseMove += ChDynamicGridProgrammer_MouseMove;
MouseRightButtonUp += ChDynamicGridProgrammer_MouseRightButtonUp;
KeyDown += ChDynamicGridProgrammer_KeyDown;
}
我還嘗試將一個鍵綁定到我的父 UserControl 上的命令,這有效,但僅當另一個控件具有焦點時。
我猜這是一個焦點相關的問題,網格沒有得到焦點,但我可以通過一些幫助讓它工作。
您可以處理父窗口的PreviewKeyDown
事件來處理窗口中的所有按鍵操作:
public class ChDynamicGridProgrammer : Grid
{
public ChDynamicGridProgrammer() : base()
{
...
Loaded += ChDynamicGridProgrammer_Loaded;
}
private void ChDynamicGridProgrammer_Loaded(object sender, RoutedEventArgs e)
{
Loaded -= ChDynamicGridProgrammer_Loaded;
Window window = Window.GetWindow(this);
window.PreviewKeyDown += ChDynamicGridProgrammer_KeyDown;
}
private void ChDynamicGridProgrammer_KeyDown(object sender, KeyEventArgs e)
{
MessageBox.Show("key pressed!");
}
}
我通過設置Focusable = true
並附加到預覽事件來解決這個問題。
public ChDynamicGridProgrammer() : base()
{
Focusable = true;
PreviewMouseLeftButtonDown += ChDynamicGridProgrammer_MouseLeftButtonDown_EventHandler;
PreviewMouseMove += ChDynamicGridProgrammer_MouseMove;
PreviewMouseRightButtonUp += ChDynamicGridProgrammer_MouseRightButtonUp;
PreviewKeyDown += ChDynamicGridProgrammer_PreviewKeyDown;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.