Анимация пользовательской кнопки ControlTemplate Foreground - PullRequest
2 голосов
/ 02 октября 2008

Я хочу изменить / анимировать свойство Foreground настраиваемого шаблона элемента управления кнопки в зависимости от состояния элемента управления.

Предварительно RC0, я установил передний план ContentPresenter, дал ему имя x: Name и сослался на него в переходах VisualStateManager.

Теперь у ContentPresenter больше нет переднего плана, так как он больше не наследует от Control. Обычно я устанавливаю передний план в стиле, который применяется к шаблонному элементу управления. Но я не могу сослаться на это из переходов / состояний VisualStateManager. Я также не могу обернуть его в TextBlock, для которого установлено свойство Foreground, и ( edit: ) Граница не имеет свойства Foreground.

Помощь очень ценится.

Обновление:

Я могу решить эту проблему для некоторых из удаленных свойств с помощью Border, но не те, которые относятся к шрифту / тексту, включая Foreground.

Поскольку это не представляется возможным, в моем конкретном случае мне удалось заменить ContentPresenter на TextBlock.

Ответы [ 4 ]

2 голосов
/ 02 октября 2008

Есть сообщение от Джесси Либерти , посвященное этой проблеме. В двух словах, идея заключается в том, что вы не можете этого сделать, потому что вы должны заставить любой контент в кнопке иметь определенный цвет переднего плана, и это решение следует оставить за самим контентом.

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

1 голос
/ 05 августа 2009

замена ContentPresenter на TextBlock работает хорошо, пока содержимое кнопки не является сложным. У меня есть пример, где содержимое кнопки имеет изображение и текстовый блок. В этом случае контент не отображается. Заменив ContentPresenter на ContentControl, вы вернете свойство Foreground.

<ControlTemplate TargetType="{x:Type ButtonBase}">
    <ContentControl Content="{TemplateBinding Content}" Foreground="{Binding Foreground}" />
</ControlTemplate>
0 голосов
/ 25 августа 2009

Я нашел решение этой проблемы, похожее на существующий ответ, который я только что заметил -

Если вы хотите ограничить возможные типы контента, которые могут быть вставлены в ваш шаблон, текстом, то он будет работать довольно хорошо:

http://storypodders.com:8081/bodhiSoftware/node/14

0 голосов
/ 02 октября 2008

Поместите границу вокруг ContentControl и заставьте VSM работать для этого пограничного контроля.

...