Различный шрифт для разных состояний кнопок - PullRequest
1 голос
/ 01 декабря 2011

Я использую элемент управления Toggle button в Silverlight.Скажите, пожалуйста, как я могу использовать другое семейство шрифтов для его состояний Checked и Unchecked.Я попытался отредактировать шаблон кнопки Toggle, используя Expression Blend, но не смог заставить его работать.Пожалуйста, помогите.

Спасибо, Омер Джавед

Ответы [ 2 ]

0 голосов
/ 01 декабря 2011

Самый простой способ - использовать встроенное поведение ChangePropertyAction. Поскольку вы упомянули, что у вас установлена ​​Expression Blend, просто перейдите на панель активов и введите «ChangePropertyAction», затем перетащите это поведение поверх вашего ToggleButton.

После этого вам просто нужно указать после , какое событие срабатывает, вы хотите изменить на . Для получения дополнительной информации о том, как использовать это поведение, см. этот пост .

Пример кода

    <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>
0 голосов
/ 01 декабря 2011

Вы можете использовать конвертер и связать свойство FontFamily TextBlock внутри Button с состоянием 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, обрабатывающим переход в состояние «Проверено».

...