从代码隐藏更改 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.0
即 double
这是一些调查细节
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;
之所以有效,是因为存在从 int
到 double
的隐式转换。
对于 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.0
即 double
这是一些调查细节
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;
之所以有效,是因为存在从 int
到 double
的隐式转换。