从代码隐藏更改 App 资源中的 FontSize

Change FontSize in App resource from code behind

对于 WPF TextBox 控件,我在 app.xaml 中使用 XAML 样式设置 FontSize,如下所示:

<System:Double x:Key="FontSizeVal">12</System:Double>

<Style TargetType="{x:Type TextBlock}">
    <Setter Property="FontSize" Value="{DynamicResource FontSizeVal}"/>
</Style>

我想从 Code Behind 更改 FontSizeVal。我尝试使用下面的代码,但没有用 (System.InvalidCastException: 'Specified cast is not valid.'):

App.Current.Resources["FontSizeVal"] = 10;

如何在代码中而不是在 XAML 中设置 FontSizeVal

更新:
我的问题解决了,我改变了: 10 至 10.0 tnx 到@ash

总结

10 文字在此处被解释为 int。使用 10.0double


这是一些调查细节

Q: App.Current.Resources["FontSizeVal"] = 10; 是做什么的?

A:用int资源代替double资源。它本身是安全的

Q: 为什么InvalidCastException?

A:由于 DynamicResource 行为,TextBlock 尝试将 int 值资源应用于 FontSize,但是! FontSize 需要 double

如果您尝试通过 DP 属性

int 值设置为 FontSize
myTextBlock.SetValue(TextElement.FontSizeProperty, 10);

它抛出 "ArgumentException":10 不是 "FontSize" 属性 的有效值。

设置双倍有效!

myTextBlock.SetValue(TextElement.FontSizeProperty, 10.0);

最后通过 属性 包装器设置 int

myTextBlock.FontSize = 10;

之所以有效,是因为存在从 intdouble 的隐式转换。