Клавиатура Focus Lag - PullRequest
       0

Клавиатура Focus Lag

1 голос
/ 19 ноября 2011

Я создаю приложение в WPF. Он состоит из сложного фона (холст, содержащий 3000 прямоугольников) и пяти кнопок сверху. Единственными элементами «Фокусируемый» и «HitVisible» являются пять кнопок. У меня проблема в том, что, если я использую таргетинг по вкладкам и фокусируюсь на последнем элементе, существует значительная задержка между нажатием вкладки и повторной фокусировкой на первом элементе. Могу ли я что-нибудь сделать, не удаляя свой фон?

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 голосов
/ 20 ноября 2011

Если это связано с вкладками, попробуйте установить для присоединенного KeyboardNavigation.TabNavigation на Canvas значение Нет, чтобы платформа пропустила Canvas и его потомков при оценке остановок вкладок.

0 голосов
/ 14 декабря 2011

Я хотел бы создать более легкие объекты, такие как объекты System.Windows.Media.DrawingVisual, и нарисовать прямоугольник в контексте рисования.Они будут размещены в элементе Framework, действующем как ItemsControl.

В этой замечательной статье описывается, как можно реализовать эффективный ItemsControl: Написание более эффективных ItemsControls

0 голосов
/ 19 ноября 2011

Я добавил две строки в ваш код и надеюсь, что это решит вашу проблему:

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);
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...