Это сложный вопрос. Передний план - это свойство кнопки, которое передается элементам управления, которые создает предъявитель контента. Поскольку это свойство зависимости, а не свойство элементов управления, доступных в шаблоне, его сложно анимировать с использованием чистого xaml.
MSDN Имеет несколько примеров того, как изменить цвет переднего плана. Однако, это не похоже на то, что вы хотите сделать эту работу из кода. (http://msdn.microsoft.com/en-us/library/system.windows.controls.button(VS.95).aspx)
Шаблон кнопки по умолчанию удерживает вас. Как вы заметили, кнопка - это элемент управления без содержимого; это означает, что дизайнер может вставить в него какой-нибудь случайный визуальный объект. Отсутствие содержимого заставляет свойство переднего плана быть элементом шаблона, а не элементом управления, потому что нет гарантированного компонента для установки цвета. Вот почему внутри него есть ведущий контента.
Так что теперь у вас есть два варианта. 1. Простой, но не гибкий (чистый xaml), 2. Создайте свой собственный элемент управления, который делает все, что делает кнопка (требует кода и большого количества тестирования)
Я реализую # 1 для вас.
Если вы измените шаблон кнопки и удалите предъявителя контента , вы можете поместить в него два текстовых блока. Один с нормальным цветом, другой с мышью над цветом.
<TextBlock x:Name="RedBlock" Text="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Foreground="Red" Visibility="Collapsed"/>
<TextBlock x:Name="BlueBlock" Text="{TemplateBinding Content}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Foreground="#FF0027FF"/>
Обратите внимание, как свойства Text в текстовых блоках связаны с содержимым кнопки. Это становится проблемой, если когда-либо возникает необходимость связать что-либо, кроме текста. TextBlocks просто не может отображать ничего, кроме буквенно-цифровых значений.
Также обратите внимание, что по умолчанию я свернул видимость на RedBlock.
Затем в моем MouseOver VisualState's Storyboard
я могу анимировать RedBlock, чтобы он был видимым, а BlueBlock, чтобы быть невидимым:
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="RedBlock">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Visible</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Visibility)" Storyboard.TargetName="BlueBlock">
<DiscreteObjectKeyFrame KeyTime="0">
<DiscreteObjectKeyFrame.Value>
<Visibility>Collapsed</Visibility>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
Это похоже на взлом, и я, вероятно, не реализовал бы эту кнопку во многих местах. Я бы хотел создать свой собственный Button с хорошими DependencyProperties для привязки. По одному для HighlightForeground и Text. Я также хотел бы скрыть или, по крайней мере, выдать исключение, если бы кто-то попытался установить для содержимого что-либо кроме значений AlphaNumeric. Однако XAML был бы одинаковым, у меня были бы разные текстовые блоки для разных визуальных состояний.
Надеюсь, это поможет.
Хорошего дня.
* 1030 Иеремия *