我在Silverlight中使用Toggle按钮控件。请告诉我如何为其Checked和Unchecked状态使用不同的字体系列。我尝试使用Expression Blend编辑切换按钮模板,但无法使其工作。请帮忙。
谢谢, Omer Javed
答案 0 :(得分:0)
您可以使用转换器并将Button内TextBlock的FontFamily属性绑定到按钮的IsChecked状态。
<ToggleButton
x:Name="tb">
<ToggleButton.Resources>
<converters:BooleanToFontFamily
x:Key="BooleanToFontFamily" />
</ToggleButton.Resources>
<TextBlock
FontFamily="{Binding IsChecked, ElementName='tb', Converter={StaticResource BooleanToFontFamily}, ConverterParameter='Segoe WP Semibold,Segoe WP SemiLight'}"
Text="Some Text" />
</ToggleButton>
C#中的转换器看起来像这样:
public class BooleanToFontFamily : IValueConverter
{
public object Convert(
object value,
Type targetType,
object parameter,
CultureInfo culture)
{
var b = (bool)value;
var families = ((string)parameter).Split(',');
return new FontFamily(b ? families[1] : families[0]);
}
public object ConvertBack(
object value,
Type targetType,
object parameter,
CultureInfo culture)
{
throw new NotSupportedException();
}
}
虽然我个人 - 我会继续尝试让该模板工作 - 可能与处理转换到“已检查”状态的VisualStateManager有关。
答案 1 :(得分:0)
最简单的方法是使用内置行为符ChangePropertyAction
。由于您已经提到安装了Expression Blend,只需转到“资产面板”并输入“ChangePropertyAction”,然后将此行为拖放到ToggleButton
之上。
之后你只需要在哪个事件之后指定你想要改变什么。有关如何使用此行为的详细信息,请参阅this post。
一些示例代码
<ToggleButton Content="ToggleButton" FontFamily="Arial" HorizontalAlignment="Center" VerticalAlignment="Center">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Checked">
<ei:ChangePropertyAction PropertyName="FontFamily">
<ei:ChangePropertyAction.Value>
<FontFamily>Arial Black</FontFamily>
</ei:ChangePropertyAction.Value>
</ei:ChangePropertyAction>
</i:EventTrigger>
<i:EventTrigger EventName="Unchecked">
<ei:ChangePropertyAction PropertyName="FontFamily">
<ei:ChangePropertyAction.Value>
<FontFamily>Arial</FontFamily>
</ei:ChangePropertyAction.Value>
</ei:ChangePropertyAction>
</i:EventTrigger>
</i:Interaction.Triggers>
</ToggleButton>