在windows phone 8.1应用程序中动态更改字体大小

本文关键字:字体 动态 phone windows 应用程序 | 更新日期: 2023-09-27 18:15:53

我需要使用滑块控件从资源字典动态更改应用程序字体大小

设置一个通用的字体大小,就像这样

 <x:Double x:Key="VerseFontSize">30</x:Double>

然后我在textblock中把这个样式命名为

<Style x:Key="Title_SubText" TargetType="TextBlock">
        <Setter Property="VerticalAlignment" Value="Center"/>
        <Setter Property="HorizontalAlignment" Value="Center"/>
        <Setter Property="Foreground" Value="{StaticResource ForegroundColorBrush}"/>
        <Setter Property="FontWeight" Value="Normal"/>
        <Setter Property="FontSize" Value="{StaticResource VerseFontSize}"/>
        <Setter Property="Margin" Value="0,5"/>
    </Style>

现在我想使用滑块控件增加或减少字体大小。

我花了一整天的时间想出一个解决方案,试了很多次,但都没用

请帮我解决这个问题。

在windows phone 8.1应用程序中动态更改字体大小

DynamicResource在WPF中正是用于这个目的。但在Windows Phone上是不可用的。

一个简单的解决方案是以典型的方式绑定到ViewModel。由于您希望这个ViewModel可以跨页面使用,我建议将它放在应用程序资源中。示例类:

public class DynamicResources : ViewModelBase
{
    private double verseFontSize;
    public double VerseFontSize
    {
        get { return verseFontSize; }
        set
        {
            verseFontSize = value;
            RaisePropertyChanged();
        }
    }
}
上面的例子使用了MVVMLight的ViewModelBase。然后将其添加到App.xaml: 中的主ResourceDictionary
<local:DynamicResources x:Key="Dynamic" VerseFontSize="30"/>

按如下方式绑定:

FontSize="{Binding VerseFontSize, Source={StaticResource Dynamic}}"

问题是setter中的Bindings在Windows Phone上也不可用。你可以尝试做下面描述的一种解决方法:Silverlight:如何在setter中为样式使用绑定(或类似的工作)

然后像这样修改代码后面的值:

private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
{
    DynamicResources resources = (DynamicResources)App.Current.Resources["Dynamic"];
    resources.VerseFontSize = resources.VerseFontSize + 1;
}

由于资源是应用级的,所以所有的页面都会更新。