簡體   English   中英

獲取基於 WPF 網格的控件的鍵盤輸入 (System.Windows.Controls.Grid)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM