我想创建一个可供我女儿使用的Windows桌面应用程序。用例是我给她一个键盘,我启动这个应用程序,这样她就可以按任何她想要的键。应用程序可以显示某些内容(例如,压缩的大字母或图片等),并阻止我的女儿从我的计算机上删除/修改内容。
我在使用特殊键处理方面遇到了一些困难。我可以使用以下技术禁用ALT + F4,但我无法通过这种方式控制ALT + TAB和Win键。
public MainWindow()
{
InitializeComponent();
this.KeyDown += new KeyEventHandler(OnButtonKeyDown);
}
protected override void OnPreviewKeyDown(KeyEventArgs e)
{
if (Keyboard.Modifiers == ModifierKeys.Alt && e.SystemKey == Key.F4)
{
e.Handled = true;
}
else
{
base.OnPreviewKeyDown(e);
}
}
我发现an article在应用程序处于活动状态时禁用了这些功能,但我认为对于非预期的应用程序退出来说它非常脆弱。
我最终做的是一种有效的解决方法,但感觉不太专业。
public MainWindow()
{
InitializeComponent();
System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += OnTimerTick;
dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 100);
dispatcherTimer.Start();
}
private void OnTimerTick(object sender, EventArgs e)
{
this.Activate();
this.Focus();
}
正如您所看到的,我创建了一个定时器,可以不时地调整焦点。这样,如果您按下Win键或ALT + TAB,它将带回应用程序。
如何以更专业的方式关注我的应用程序?我正在考虑一种解决方案,它可以检测应用程序何时失去焦点(出于任何原因)并将焦点设置回来。
答案 0 :(得分:4)
使用Window.Deactivated
事件并重新激活它以达到您想要的效果:
this.Deactivated += (s, e) => this.Activate();
您还希望将应用程序全屏显示,并在应用程序中创建隐藏的快捷键。按下该按钮后,系统会提示您输入密码,然后您可以关闭该应用程序。否则,关闭应用程序也是一件麻烦事。
答案 1 :(得分:0)
在我的XAML标记中,我添加了用于停用的事件监听器。
<Window x:Class="Desktop.MainWindow"
Deactivated="MainWindow_OnDeactivated">
...
</Window>
在后面的代码中,我添加了重新激活的事件处理程序。
namespace Desktop
{
public partial class MainWindow : Window
{
public MainWindow() { InitializeComponent(); }
private void MainWindow_OnDeactivated(object sender, EventArgs eventArgs)
{
Activate();
}
}
}
答案 2 :(得分:0)
使用 以下窗口XAML:
<Window x:Class="WpfStackOverflowTempProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="450" Width="525"
DataContext="{RelativeSource Mode=PreviousData}"
xmlns:local="clr-namespace:WpfStackOverflowTempProject"
WindowState="Maximized" ResizeMode="NoResize"
Topmost="True"
>
Topmost="True"
应该从功能的角度出发。WindowState="Maximized"
&amp;ResizeMode="NoResize"
限制 与其他窗口的互动。