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