Как изменить визуальное состояние шаблона ControlTemplate без его замены?

Я хочу определить ToggleButton когда он отмечен, он отображается с красным передним планом (например), а не по умолчанию для нажатой кнопки.

Я вижу, что визуальные состояния поддерживаются как именованные элементы внутри ToggleButton"s ControlTemplate,

Какой самый простой способ заменить / удалить / настроить визуальное состояние БЕЗ переопределения всего шаблона?

2 ответа

Решение

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

После того, как шаблон был применен к элементу управления (после первого цикла измерения / отображения), вы можете получить доступ к созданному экземпляру шаблона и его дочерним компонентам, просто используя VisualTreeHelper.GetChild (myToggleButton, 0) - это вернет корневой объект визуального дерева экземпляра шаблона, из которого вы можете добавлять / удалять / изменять дочерние объекты в его коллекции Children.

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

Мой реальный вопрос по этому вопросу здесь: как заменить часть ControlTemplate во время выполнения в Silverlight 3?

Вы пытались создать свой собственный ControlTemplate и установить BasedOn параметр на стандартный и то только поменял что нужно?

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