我正在编写C#/ XAML UWP App。
我想在我的应用中处理整个页面的KeyDown事件。也就是说,无论页面上的具体控件具有焦点(例如TextBox,ListView等),每当用户在该页面上按下某个键时,我都希望触发整个Page KeyDown事件的全局。从理论上讲,这应该很简单 - 在导航到或加载页面时订阅KeyDown事件,例如:
protected override void OnNavigatedTo(NavigationEventArgs e)
{
KeyDown += SettingsPage_KeyDown;
}
在实践中,这对所有页面都不起作用,即使对于非常简单的页面也是如此,我无法理解为什么。我连接了Window.Current.CoreWindow.KeyDown事件,该事件始终正常工作, 但是我想知道Page的KeyDown事件有什么问题。显然,为什么这不起作用可能有数百种原因,但有没有共同点?我尝试将焦点设置为页面(程序,键盘)并且仍然 当这个事件发生时,似乎没有规则,当它没有时,似乎没有规则。
答案 0 :(得分:3)
我正在使用Windows IoT应用程序中的下一个代码,它可以工作:
public sealed partial class YourPage: Page
{
public YourPage() //Constructor
{
this.InitializeComponent();
//Add this line
Window.Current.CoreWindow.KeyDown += CoreWindow_KeyDown;
}
void CoreWindow_KeyDown(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.KeyEventArgs args)
{
//todo
}
}
答案 1 :(得分:0)
您还可以在XAML中添加KeyDown属性:
var languages = [
{text: 'C', value: 'c' },
{text: 'C#', value: 'csharp' },
{text: 'C++', value: 'cpp' },
{text: 'CSS', value: 'css' },
{text: 'F#', value: 'fsharp' },
{text: 'Java', value: 'java'},
{text: 'HTML/XML', value: 'markup'},
{text: 'JavaScript', value: 'javascript' },
{text: 'Json', value: 'json' },
{text: 'LESS', value: 'less' },
{text: 'PHP', value: 'php'},
{text: 'Python', value: 'python'},
{text: 'Ruby', value: 'ruby'},
{text: 'SASS', value: 'scss' },
{text: 'SQL', value: 'sql' },
{text: 'TypeScript', value: 'typescript' }
];
在文件背后的代码中:
<Page
x:Class="WESS1.Page1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:WESS1"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d" KeyDown="SettingsPage_KeyDown">