簡體   English   中英

如何在wpf應用程序中創建鍵盤輸入?

[英]How do I create keyboard input in a wpf application?

我想用c#制作一個wpf應用程序,該應用程序在屏幕上顯示一些文本,並且用戶應該在其中編寫響應,然后按Enter提交響應。 我不想使用文本框,因為窗口中輸入的文本只有一行,並且我不想用戶必須單擊以選擇文本框。 我希望該應用程序沒有鼠標。

我的問題是:如何做到這一點,以便用戶寫下答案后,只需按Enter即可提交響應?

我已經嘗試在Microsoft幫助網站上找到以下代碼片段:

private void OnKeyDownHandler(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Return)
        {

            doSomething();
        }
    }

我想我必須在其他地方添加一些代碼,但是我不確定我需要在哪里添加什么。

如果您有用於提交的按鈕,則可以通過使用IsDefault=true輕松地將其設置為默認按鈕(在此處寫了有關執行此操作的提示以及取消轉義的提示)。

除此之外,您還必須在某個地方編寫它(但是,您是否不想使用文本框?您可以默認選擇它,或者如果您沒有焦點,可以選擇進入它),並且可以處理Enter key鍵以“捕獲” Enter否則。

如果要確保每次按下Enter鍵時窗口都處理,而無需關注控件的焦點,則可以使用PreviewKeyDown事件:

private void Window_PreviewKeyDown(object sender, KeyEventArgs e)
{
    if (e.Key == Key.Enter)
    {
        //Process user input
        e.Handled = true;
    }
} 

當然,如果您正在執行mvvm,則可以創建行為來封裝事件處理程序:

 public class WindowBehavior : Behavior<Window>
    {
        protected override void OnAttached()
        {
            AssociatedObject.PreviewKeyDown += AssociatedObject_PreviewKeyDown;
        }

    private void AssociatedObject_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter)
        {
            MessageBox.Show("Enter from Window");
            e.Handled = true;
        }
    }

    protected override void OnDetaching()
    {
        AssociatedObject.PreviewKeyDown -= AssociatedObject_PreviewKeyDown;
    }

我建議您閱讀有關WPF事件基本的氣泡,隧道和直接事件的文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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