对于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 to @ash
答案 0 :(得分:1)
<强>摘要强>
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);
它抛出&#34; ArgumentException&#34;:10不是&#34; FontSize&#34;的有效值。属性。
设置双重作品!
myTextBlock.SetValue(TextElement.FontSizeProperty, 10.0);
最后通过属性包装器设置int
:
myTextBlock.FontSize = 10;
它有效,因为从int
到double
隐式转换。