Как изменить визуальное состояние стека панели из события клавиатуры

В приложении C++/winrt я могу обработать щелчок в панели стека и ответить изменением фона панели. Но если я вызову тот же метод из обработчика событий KeyDown для главной страницы, внешний вид панели не изменится. Оба вызова изменения фона панели происходят в одном из потоков SHCore.dll, и мне интересно, почему они не находятся в "Основном потоке". Использование диспетчера следующим образом все еще оставляет меня в потоке SHCore:

Window::Current().Dispatcher().RunAsync(Windows::UI::Core::CoreDispatcherPriority::High, [this, theKey,&handled]
                        {
                        handled = PressLetterKey(theKey);

                        });

Поскольку нет видимого эффекта от запуска изменения в обработчике клавиатуры, я начинаю задумываться, не является ли это проблемой потока. Тем не менее, поток выглядит одинаково как в функциональном, так и в нефункциональном случаях, и обработчик кликов и обработчик клавиш вызывают один и тот же метод на панели стека. Может ли этот поток быть проблемой, или есть какие-то другие причина, по которой панель не показывает свое изменение внешнего вида при нажатии клавиши?

Конечно, запуск не обязательно должен быть нажатием клавиши - я просто спрашиваю, можно ли программно переключать внешний вид панели стека... например, если кто-то хочет моргнуть кнопкой.

1 ответ

Хорошо, еще раз я только что сделал глупую ошибку, но здесь можно найти ответ на вопрос о потоке. Да, поток SHCore - это UIThread, по крайней мере, здесь. "Главная тема" - это нечто другое. Любое событие щелчка или событие нажатия клавиши поступает в поток пользовательского интерфейса, готовый к действию, нет необходимости вызывать диспетчер. В моем случае я инициировал изменения в одной из больших серий панелей стека, и - та, которую я думал, что вызывал, на самом деле не была правильной; сработавший элемент был просто за кадром... так что у вас есть!

Другие вопросы по тегам