2012-01-14 25 views
6

Çalışma zamanında WPF statik kaynağının değerini nasıl değiştirebilirim?Bir wpf statik kaynağının değerini değiştirme

Bazı TextBlocks sonra ben biçimlerini değiştirmek istiyorum denetime bağlı olan nesnenin bağlı

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

hangi referans aşağıdaki kaynakları

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

var. şöyle Kontrolde özelliklerini kurdunuz:
public string LengthFormat 
{ 
    set 
    { 
     this.Resources["LengthFormat"] = value; 
    } 
} 
public string AreaFormat 
{ 
    set 
    { 
     this.Resources["AreaFormat"] = value; 
    } 
} 
public string InertiaFormat 
{ 
    set 
    { 
     this.Resources["InertiaFormat"] = value; 
    } 
} 

sonra bağlayıcı önce ben her dize ayarlayın.

Yine de işe yaramıyor, kimsenin dikkatini çekiyor?

Alkışlar

cevap

3

Aslında iyi çalışıyor. Ancak kaynak anahtarlar gözlemlenmediğinden kullanıcı arayüzü güncellenmedi.

Değiştirilebilecek bağlamalar istiyorsanız, statik kaynakları kullanmamalısınız. Bunun yerine, UI'nin değişiklikleri gözlemlemesine izin vermek için, özellikler üzerinde INotifyPropertyChanged ile düzenli bağlamaları kullanın.

0

Dikkatli kaynak kullanılmayacağından, UI'nin değişmeyeceği için Claus ile aynı fikirdeyim. Dinamik kaynak haline

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

Bir hata iletisi alıyorum: Hata 4 A 'DynamicResourceExtension', 'Binding' türünde 'StringFormat' özelliğinde ayarlanamaz. Bir 'DynamicResourceExtension' sadece bir DependencyObject Bağımlılık Özelliği üzerinde ayarlanabilir. –

+0

ohh Doğru, mantıklı. Bu durumda çözümümüzü uygulayamayacaksınız. Sadece DependencyProperty için çalışacak –

3

en belirgin şekilde statik kaynak değiştirerek deneyin öneririm bunun için ne olduğunu DynamicResource kullanarak geçmek etmektir.

İlgili konular