键盘焦点滞后

本文关键字:滞后 焦点 键盘 | 更新日期: 2023-09-27 18:15:06

我正在WPF中构建一个应用程序。它由一个复杂的背景(包含3000个矩形的画布)和五个按钮组成。唯一的"可聚焦"answers"可见"元素是五个按钮。我遇到了一个问题,如果我使用标签定位并聚焦最后一个元素,那么在按下标签和再次聚焦第一个元素之间会有明显的延迟。我能做些什么而不需要删除我的背景吗?

for (int i = 0; i < max; ++i)
{
    Rectangle rectangle = new Rectangle();
    rectangle.Width  = 60;
    rectangle.Height = 60;
    rectangle.Fill = new SolidColorBrush (Color.FromArgb
        ((byte) random.Next (0, 12), 255, 255, 255));
    Canvas.SetLeft (rectangle, x * 30 - 5);
    Canvas.SetTop  (rectangle, y * 30 - 5);
    uiCanvasBackground.Children.Add (rectangle);
}

键盘焦点滞后

我将创建更多轻量级对象,如System.Windows.Media.DrawingVisual对象,并在绘图上下文中绘制矩形。这些将驻留在一个框架元素中,作为ItemsControl。

这篇很棒的文章描述了如何实现一个有效的ItemsControl:编写更高效的ItemsControls

我已经在你的代码中添加了两行,我希望这将解决你的问题:

for (int i = 0; i < max; ++i)
{
    Rectangle rectangle = new Rectangle();
    rectangle.Width = 60;
    rectangle.Height = 60;
    // I added the following two lines
    rectangle.Focusable = false;
    rectangle.SetValue(KeyboardNavigation.IsTabStopProperty, false);
    rectangle.Fill = new SolidColorBrush(Color.FromArgb((byte)random.Next(0, 12), 255, 255, 255));
    Canvas.SetLeft(rectangle, x * 30 - 5);
    Canvas.SetTop(rectangle, y * 30 - 5);
    uiCanvasBackground.Children.Add(rectangle);
} 

如果它与选项卡相关,则尝试设置附加的KeyboardNavigation。将Canvas上的TabNavigation设置为None,以便框架在计算制表位时跳过Canvas及其后代。