Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从代码隐藏更改应用程序资源中的FontSize_C#_Wpf_Resourcedictionary_Wpf Style - Fatal编程技术网

C# 从代码隐藏更改应用程序资源中的FontSize

C# 从代码隐藏更改应用程序资源中的FontSize,c#,wpf,resourcedictionary,wpf-style,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}"/> </

对于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>
如何在代码中而不是在XAML中设置
FontSizeVal

更新:
我的问题解决了,我改变了: 10 到 10
tnx对@ash的总结


10
literal在这里被解释为
int
。使用
10.0
这是
double


以下是一些调查细节

Q:什么是
App.Current.Resources[“FontSizeVal”]=10做什么

答:它用int资源替换double资源。它本身是安全操作的

Q:为什么
InvalidCastException

答:由于DynamicSource行为,TextBlock尝试将
int
value资源应用于FontSize,但是!FontSize需要双倍的

如果您试图通过DP属性将
int
值设置为FontSize

myTextBlock.SetValue(TextElement.FontSizeProperty, 10);
它抛出“ArgumentException”:10不是“FontSize”属性的有效值

设置双重工程

myTextBlock.SetValue(TextElement.FontSizeProperty, 10.0);
最后通过属性包装器设置
int

myTextBlock.FontSize = 10;

它之所以有效,是因为存在从
int
double

的隐式转换,“不工作”并不能解释程序中发生了什么。它是否引发运行时异常?或者UI中有一个文本块,但它的大小仍然相同?还是别的?请澄清System.InvalidCastException:“指定的强制转换无效。”
10
literal在此解释为
int
。试试
10.0
tnx这对我很有用。
myTextBlock.FontSize = 10;