我目前正在开发通用应用程序,我需要分别处理移动设备和桌面的文本框字体大小。 我找到了一些方法,但没有一个方法可以解决这个问题: 使用带有StateTrigger的VisualStateManager作为示例:
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="ChangeFontSize">
<VisualState x:Name="Desktop">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="500"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="textBox.FontSize" Value="18" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Mobile">
<VisualState.StateTriggers>
<AdaptiveTrigger MinWindowWidth="0"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="textBox.FontSize" Value="22" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
不适合,因为StateTrigger仅在屏幕调整大小时触发。 重新定义xaml样式:
<x:Double x:Key="MyFontSize">22</x:Double>
\\\\\\
........
\\\\\\
Application.Current.Resources["MyFontsSettings"] = 18;
对&#34; MyFontSize&#34;没有任何影响,它仍然有价值&#39; 22&#39;。
有没有正确的方法来正确地执行此操作,而无需在每个页面和控件上进行设置?我希望在样式中设置一次并在任何地方使用。欢迎任何建议。
答案 0 :(得分:2)
我的问题是我无法更改运行时
中样式中定义的字体大小
根据您的要求,您可以参考Template 10中实施的Setting
。
创建实现INotifyPropertyChanged
并包含FontSize
属性
public class Setting : INotifyPropertyChanged
{
private double _fontSize = 20;
public double FontSize
{
get { return _fontSize; }
set { _fontSize = value; OnPropertyChanged(); }
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
在应用程序启动期间,在应用程序资源字典中创建一个Setting
实例以进行初始化设置。
<Application.Resources>
<ResourceDictionary>
<local:Setting x:Key="Setting"/>
</ResourceDictionary>
</Application.Resources>
使用数据绑定将FontSize
属性绑定到TextBlocks
,如下所示。
<TextBlock Name="MyTextBlock" Text="Hi This is nico" FontSize="{Binding FontSize, Source={StaticResource Setting} }"/>
更改运行时样式中定义的字体大小。
((Setting)Application.Current.Resources["Setting"]).FontSize = 50;