У меня возникают некоторые проблемы с тем, что WPF не полностью перерисовывает элемент управления кнопки при смене кнопки из другого потока, и я не уверен, как заставить его выполнить полное перерисовывание.
Ситуация такова, чтопри получении сообщения (через WCF - но источник не важен, за исключением того, что это внешний поток), я обновляю цвет переднего плана и видимость кнопки.WPF немедленно перерисовывает текст на лицевой стороне кнопки, но поверхность кнопки не перекрашивается, пока я не щелкну где-нибудь в приложении.
Я пытался вызвать InvalidateVisual () для кнопки, но это не помогло.Я думаю, что я не понимаю, как фоновый поток может вызвать перерисовку.Но расстраивает то, что что-то перекрашивается, и все другие элементы управления, которые я использую (текстовые и графические элементы управления), также перекрашиваются должным образом, когда я обновляю их из того же сообщения о получении.пустое сообщение Диспетчеру приложения через Invoke (), но там тоже не повезло.
Поэтому я ищу советы о том, как сообщить WPF, что ему нужно обновить остальную часть кнопки, а не только текст.
Редактировать
Это грубый скелет моей программы.Обратите внимание, что я обернул кнопку в классе, так как есть другая связанная информация о состоянии, которую я храню с ней.
class myButton
{
Button theButton
void SetButton()
{
theButton.Forground = a new color
}
}
main
{
myButton.theButton = (Button on WPF canvass)
RegisterCallback( mycallbackFunction) with WCF client endpoint
}
void myCallbackFunction(message)
{
if message has button related stuff, call myButton.SetButton
}
Редактировать 2
Решил мою проблему .. На самом деле это был конфликт между методом "CanExecute" и настройкой атрибутов кнопок в обратном вызове.Как только я удалил функцию «CanExecute», все заработало.