不同的按钮状态的不同字体

时间:2011-12-01 05:45:31

标签: silverlight togglebutton font-family

我在Silverlight中使用Toggle按钮控件。请告诉我如何为其Checked和Unchecked状态使用不同的字体系列。我尝试使用Expression Blend编辑切换按钮模板,但无法使其工作。请帮忙。

谢谢, Omer Javed

2 个答案:

答案 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>