У меня есть собственный стиль для кнопок в моем проекте Silverlight, и я хочу установить основной цвет (и другие свойства) текста в кнопке. Но моя идея состоит в том, чтобы использовать ContentPresenter
в стиле. Таким образом, я все еще могу положить в кнопку все, что захочу.
Но если есть текст как контент, я хочу иметь возможность устанавливать определенные свойства, такие как Foreground, FontFamily, FontSize и т. Д. Я также хочу изменять эти свойства при наведении и т. Д.
Это мой стиль (упрощенно):
<Style x:Key="ButtonStyle" TargetType="Button">
<!-- There are other properties here, but I left them out for brevity -->
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Border x:Name="ButtonBorder"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}">
<ContentPresenter x:Name="ButtonContent"
Content="{TemplateBinding Content}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}">
</ContentPresenter>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal"/>
<VisualState x:Name="MouseOver">
<Storyboard>
<!-- I would like to change the Foreground here -->
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Всю информацию, которую я нахожу, скажите мне добавить TextBlock.Foreground="..."
в ContentPresenter, т. Е .:
<ContentPresenter x:Name="ButtonContent"
Content="{TemplateBinding Content}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
TextBlock.Foreground="{TemplateBinding Foreground}">
</ContentPresenter>
Однако, это не работает для меня. Я получаю сообщение об ошибке, в котором говорится, что присоединяемое свойство Foreground недоступно для типа TextBlock. Это потому, что это решение будет работать только в WPF, и как я могу установить это свойство в Silverlight?
Я знаю, что могу просто установить передний план с помощью тега <Setter>
, но как я могу изменить его при наведении мыши? Я хочу установить передний план ContentPresenter, чтобы в MouseOver VisualState я мог его изменить.