在Windows Phone 8.1应用程序中动态更改FontSize

时间:2015-10-03 08:38:51

标签: c# wpf xaml windows-phone-8 resourcedictionary

我需要使用滑块控件

从资源字典中动态更改应用程序字体大小

设置我刚刚创建的常用字体大小

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

然后我在文本块中调用了这个样式,就像这样

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

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

我花了一整天的时间来制作一个解决方案并尝试了很多,但没有任何作用

请帮助我们解决这个问题。

1 个答案:

答案 0 :(得分:0)

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}}"

问题是,Windows Phone中的Bindings在Windows Phone上也不可用。您可以尝试执行此处描述的解决方法之一: Silverlight: How to use a binding in setter for a style (or an equivalent work around)

并修改代码隐藏中的值,如下所示:

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

由于资源是应用程序范围的,所有页面都会更新。