在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>
现在我想使用滑块控件增加或减少字体大小。
我花了一整天的时间想出一个解决方案,试了很多次,但都没用
请帮我解决这个问题。
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;
}
由于资源是应用级的,所以所有的页面都会更新。