我正在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);
}
答案 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