在我的应用程序中,我有一个加载屏幕,该屏幕应该覆盖整个屏幕(省略徽标):Expected
我的视图由网格中包含的StackPanel(用于徽标和一些文本)组成。使用System.Windows库中的Window.Show()显示它。
var popup = new Window()
{
WindowState = WindowState.Maximized,
WindowStyle = WindowStyle.None,
AllowsTransparency = true,
Visibility = Visibility.Visible,
HorizontalAlignment = HorizontalAlignment.Center,
VerticalAlignment = VerticalAlignment.Center,
Content = loaderMvvmSet.View,
IsHitTestVisible = true,
Background = new SolidColorBrush(Colors.White) { Opacity = 0.1 },
Topmost = true,
ShowInTaskbar = false
};
[测试时,我们注意到用户可以使用Window
+ Arrow
组合键绕过加载屏幕。要禁用此大小调整,我设置为ResizeMode = ResizeMode.NoResize
。这似乎对单击Windows
+ Up / Right / Left
有用。但是,当我单击Windows
+ Down
时,我得到的是:Actual
我检查了其他帖子,但无法找到解决我问题的方法。这是我尝试过的:
1。将事件处理程序附加到KeyDown事件:
a。将每个键的Handled属性分别设置为true:
private void OnKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.LWin)
{
e.Handled = true;
}
if (e.Key == Key.Down)
{
e.Handled = true;
}
}
b。检查是否同时按下了两个键并将Handled属性设置为true:
private void OnKeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.LWin && Keyboard.IsKeyDown(Key.Down))
{
e.Handled = true;
}
}
c。为两个键创建单独的布尔值,然后如果两个都设置为true,则将忽略该事件。
2。向窗口添加了键绑定,并给它一个空命令:
a。使用修饰符和键:
InputBindings = { new KeyBinding() { Modifiers = ModifierKeys.Windows, Key = Key.Down, Command = EmptyCommand } }
b。仅使用Down
键:
InputBindings = { new KeyBinding() { Key = Key.Down, Command = EmptyCommand } }
我注意到的第一点是KeyDown事件是为Windows
键触发的,而不是Down
键触发的。好像只要我仍然按住Windows键,Down
键就不会被确认。对于点2,同时拥有修饰符和键(点a)似乎根本不起作用;我在EmptyCommand
中的断点从未被击中。并且,仅具有Down
键(点b)似乎与第1点中的问题相同,它将仅使用LWin
键来触发KeyBinding,但不会被Down
键确认(因为我们仍然持有LWin
)。
这里是我检查过的一些链接:
这可能不是理想的解决方案,但是如果LWin + Down(恢复还原)触发了大小更改事件,也许您可以强制重置窗口状态?
XAML:SizeChanged="MyLoaderView_OnSizeChanged"
隐藏代码:
private void MyLoaderView_OnSizeChanged(object sender, SizeChangedEventArgs e)
{
Window window = (Window)sender;
window.WindowState = WindowState.Maximized;
}