2010-12-20 4 views
0

コードからリソース内のスタイルを変更する必要があります。 コードから<Style>を変更する

Style st = (Style)this.Resources["myStyle"]; 
set.Setters.Etc... 

しかし、私はそのスタイルで特定のセッターの値を変更する必要があります:私はすでに、私はそのようにセッターにアクセスすることができます知っています。それを行う方法はありますか? (少なくとも、WPFで

SetterBase sb = style.Setters[0]; 
Setter s = (Setter)sb; 
s.TargetName = "abcd"; 

はまた、どのように私は、「プロパティ」をもとに、このような

答えて

2

は、「クリーン」な方法ではないかもしれないが、私は実際に動作します気にいらアウトが見つかりました:私は代わりに私は古いセッターを見つけるセッターの値を置き換えることはできませんように思え

Style myStyle = (Style)this.Resources["myStyle"]; 

SetterBase sb = myStyle.Setters.FirstOrDefault(z => (z as Setter).Property == Rectangle.FillProperty); 
int iSetterIndex = myStyle.Setters.IndexOf(sb); 

myStyle.Setters[iSetterIndex] = new Setter(Rectangle.FillProperty, newScrollThumbBackground); 

をプロパティを使用してインデックスを作成する。次に、見つかったインデックスのセッターを新しいSetterオブジェクトに置き換えます。

+1

に更新しました。これは通常の方法です。あなたの 'z'は' Setter'ではないことに気をつけてください。(少なくともWPFでは) 'EventSetter'となるかもしれないので、より安全な方法は' z =>(zはSetter)&&((zはSetter ).Property == Rectangle.FillProperty) ' – Vlad

0

何かがしなければならない

感謝をセッターリストで適切なセッターを取得することができます)

編集:
Silverlightでは0はありませんですが、PropertyValueにはまだアクセスできます。だから、if (s.Property == Button.IsEnabled) s.Value = false;のようなものを言う。

編集:
あなたは自分でより良い解決策を見つけました。 :-) Valueを変更することはできません。

+0

s。TargetNameはSilverlightに存在しません。また、私は値を変更することができるようにしたいと思います。しかし今私の主な問題は、Setter by Propertyを取得する方法です。 – danbord

+0

@danbord:答えを – Vlad

関連する問題