从后面的代码更改App资源中的FontSize

时间:2017-12-16 17:00:08

标签: c# wpf resourcedictionary wpf-style

对于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

1 个答案:

答案 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;

它有效,因为从intdouble隐式转换。