2013-12-13 93 views
4

我在WPF(c#)中编程。我试图改变风格的设定者的价值。更改设置值风格

我的风格是:

<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”后在使用中(密封),它不能被修改

我怎样才能解决这个问题?

+0

您使用的是风格的地方?显示更多代码。如果因为我只是使用你所拥有的,这是行得通的。 –

+0

感谢您的关注。我更新它。 –

回答

1

既然你在做纯粹的UI并且在代码背后,一些答案建议你使用MVVM,这将使许多事情变得更容易。

为什么你需要操纵风格?只是按钮,你想操纵它的FontSize?我假设你正在按钮的Click事件上更改字体大小。

试试这个,然后

private void btnCancel_Click_1(object sender, RoutedEventArgs e) 
    { 
     var button = sender as Button; 
     if (button != null) button.FontSize = 30; 
    } 
+0

同意的,特定于UI的(不涉及数据相关和非商业逻辑相关的问题)在后面的代码中都可以。 –

8

的风格只能设置一次(编译后加盖公章),你不能使用代码更改

这样的解决方案是

  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; 
    
0

你需要创建一个视图模型,这样的事情(我使用的MVVM精简版类ViewModelBase,你只需要支持属性更改通知的东西):

public class MyViewModel : ViewModelBase 
{ 
    private double _FontSize = 0.0; 
    public double FontSize 
    { 
     get { return this._FontSize; } 
     set { this._FontSize = value; RaisePropertyChanged(() => this.FontSize); } 
    } 
} 

然后在窗口吸气剂一起创建它的一个实例:

public partial class Window1 : Window 
{ 
    public MyViewModel MyViewModel {get; set;} 
    public Window1() 
    { 
     InitializeComponent(); 
     this.MyViewModel = new MyViewModel { FontSize = 80 }; 
    } 
} 

然后最后你需要绑定你的风格在视图模型使用的值:

<Window.Resources> 
    <Style TargetType="Control" x:Key="st"> 
     <Setter Property="FontFamily" Value="Tahoma"/> 
     <Setter Property="FontSize" Value="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType=Window}, Path=MyViewModel.FontSize}"/> 
    </Style> 
</Window.Resources>