Как изменить визуальное состояние шаблона ControlTemplate без его замены?
Я хочу определить ToggleButton
когда он отмечен, он отображается с красным передним планом (например), а не по умолчанию для нажатой кнопки.
Я вижу, что визуальные состояния поддерживаются как именованные элементы внутри ToggleButton
"s ControlTemplate
,
Какой самый простой способ заменить / удалить / настроить визуальное состояние БЕЗ переопределения всего шаблона?
2 ответа
Я понимаю, что уже очень поздно, но я просто столкнулся с той же проблемой и сам нашел решение, так что, надеюсь, это кому-нибудь пригодится.
После того, как шаблон был применен к элементу управления (после первого цикла измерения / отображения), вы можете получить доступ к созданному экземпляру шаблона и его дочерним компонентам, просто используя VisualTreeHelper.GetChild (myToggleButton, 0)
- это вернет корневой объект визуального дерева экземпляра шаблона, из которого вы можете добавлять / удалять / изменять дочерние объекты в его коллекции Children.
Очевидно, вы изменяете только визуальное состояние этого экземпляра элемента управления, а не сам ресурс шаблона, поэтому новые элементы управления, созданные из этого шаблона, будут по-прежнему иметь первоначальный внешний вид.
Мой реальный вопрос по этому вопросу здесь: как заменить часть ControlTemplate во время выполнения в Silverlight 3?
Вы пытались создать свой собственный ControlTemplate
и установить BasedOn
параметр на стандартный и то только поменял что нужно?