2012-01-14 25 views
6

実行時にWPF静的リソースの値を変更するにはどうすればよいですか?wpf静的リソースの値を変更

私はいくつかのテキストブロックは、私は形式を変更したいコントロールにバインドするオブジェクトに応じて、その後、

<TextBlock Grid.Row="2" Grid.Column="1" 
Text="{Binding Path=Breadth, StringFormat={StaticResource ResourceKey=LengthFormat}}" /> 

を参照する次のリソース

<UserControl.Resources> 
    <sys:String x:Key="LengthFormat">#.# mm</sys:String> 
    <sys:String x:Key="AreaFormat">#.# mm²</sys:String> 
    <sys:String x:Key="InertiaFormat">#.# mm⁴</sys:String> 
</UserControl.Resources> 

を持っています。 次のように私は、コントロールのプロパティを設定している:

public string LengthFormat 
{ 
    set 
    { 
     this.Resources["LengthFormat"] = value; 
    } 
} 
public string AreaFormat 
{ 
    set 
    { 
     this.Resources["AreaFormat"] = value; 
    } 
} 
public string InertiaFormat 
{ 
    set 
    { 
     this.Resources["InertiaFormat"] = value; 
    } 
} 

その後、私は、各文字列を設定バインドする前に。

しかし、それは動作しません、誰でもお勧めですか?

乾杯

答えて

3

実際にはうまくいきます。しかし、リソースキーは監視されていないため、UIは更新されません。

変更可能なバインディングが必要な場合は、静的リソースを使用しないでください。プロパティにINotifyPropertyChangedという正規のバインディングを使用して、UIが変更を観察できるようにします。

0

静的リソースが観測されないため、私はClausに同意します。あなたのUIは変更されません。私が最も明白な方法は、それが何のためにあるのかであるDynamicResourceを使用するように切り替えることである動的なリソースへ

<TextBlock Grid.Row="2" Grid.Column="1" Text="{Binding Path=Breadth, StringFormat={DynamicResource ResourceKey=LengthFormat}}" /> 
+1

エラー4「DynamicResourceExtension」は、「バインディング」タイプの「StringFormat」プロパティで設定できません。 「DynamicResourceExtension」は、DependencyObjectのDependencyPropertyでのみ設定できます。 –

+0

オハイオ州右、意味をなさない。この場合、私のソリューションを適用することはできません。これはDependencyPropertyに対してのみ機能します –

3

を静的リソースを変更して試してお勧めします。

関連する問題