对于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:'指定的强制转换无效。'):
App.Current.Resources["FontSizeVal"] = 10;
如何在代码中而不是在XAML中设置FontSizeVal
?
更新: 我的问题解决了,我改变了:10到10.0 tnx到@ash
摘要
10
文字在这里被解释为int
。使用10.0
,这是double
这里有一些调查细节
问:App.Current.Resources["FontSizeVal"] = 10;
做什么?
答:它用int资源替换double资源。它本身就是安全的操作
问:为什么InvalidCastException
?
答:由于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
的隐含演员。