从后面的代码更改App资源中的字体大小

问题描述 投票:0回答:1

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

c# wpf resourcedictionary wpf-style
1个回答
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);

它抛出“ArgumentException”:10是“FontSize”属性的无效值。

设置双重作品!

myTextBlock.SetValue(TextElement.FontSizeProperty, 10.0);

最后通过属性包装器设置int

myTextBlock.FontSize = 10;

这是有效的,因为有从intdouble的隐含演员。

© www.soinside.com 2019 - 2024. All rights reserved.