c# - 更改样式中的 setter 值

标签 c# wpf xaml styles

我正在使用 WPF(c#) 进行编程。我正在尝试改变风格的二传手的值(value)。

我的风格是:

<Style TargetType="Control" x:Key="st">
    <Setter Property="FontFamily" Value="Tahoma"/>
    <Setter Property="FontSize" Value="14"/>
</Style>

我在按钮中使用它:

<Button x:Name="btnCancel" Style="{StaticResource st}" Content="انصراف" Canvas.Left="30" Canvas.Top="18" Width="139" Height="53" FontFamily="2  badr" FlowDirection="LeftToRight" Click="btnCancel_Click_1" />

我尝试做的是这段代码:

Style style = new Style();
style = (Style) Resources["st"];
Setter setter =(Setter) style.Setters[1];
setter.Value = 30;

将字体大小设置为 30 后出现此错误?

“SetterCollectionBase”在使用(密封)后,无法修改

我该如何解决这个问题?

最佳答案

样式只能设置一次(编译后密封),不能用代码更改

所以解决方案是

  1. 通过代码创建样式

        Style st = new Style(typeof(System.Windows.Controls.Control));
        st.Setters.Add(new Setter(Control.FontFamilyProperty, new FontFamily("Tahoma")));
        st.Setters.Add(new Setter(Control.FontSizeProperty, 14.0));
    

稍后你可以改变它

        st.Setters.OfType<Setter>().FirstOrDefault(X => X.Property == Control.FontSizeProperty).Value = 30.0;//safer than Setters[1]

  1. 直接改变属性

    btnCancel.FontSize=30.0;
    

关于c# - 更改样式中的 setter 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20575775/

相关文章:

wpf - 在代码隐藏中创建内容控件

c# - 为什么列表框模板中的绑定(bind)命令无法运行?

c# - x :Bind syntax for event binding giving error CS0122: inaccessible due to protection level

c# - 如何在调试中隐藏 xaml ui 元素

c# - 避免破坏生成的代码

c# - 需要一种更好的方法来访问 View 中的 ViewModel

c# - 处理在 xaml 中创建的控件

c# - CLR 如何处理配置设置

c# - Windows 窗体 - 如何启动单独的线程并保持当前线程

c# - 如果 wpf 应用程序没有响应,则自动重启