键盘焦点滞后

时间:2011-11-19 09:57:11

标签: c# .net wpf xaml

我正在WPF中构建一个应用程序。它由复杂的背景(包含3000个矩形的Canvas)和顶部的五个按钮组成。唯一的“可聚焦”和“HitVisible”元素是五个按钮。我遇到了一个问题,如果我使用制表符定位并聚焦最后一个元素,则在按Tab键并让它再次聚焦第一个元素之间存在明显的延迟。有什么我可以做而不必删除我的背景吗?

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);
}

3 个答案:

答案 0 :(得分:0)

我在代码中添加了两行代码,希望能解决您的问题:

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);
} 

答案 1 :(得分:0)

如果它与Tab键相关,则尝试将Canvas上附加的KeyboardNavigation.TabNavigation设置为None,以便框架在评估制表位时跳过Canvas及其后代。

答案 2 :(得分:0)

我会创建更多轻量级对象,例如System.Windows.Media.DrawingVisual对象,并在绘图上下文中绘制矩形。这些将托管在充当ItemsControl的Framework元素中。

这篇精彩的文章介绍了如何实现高效的ItemsControl: Writing More Efficient ItemsControls