2012-01-14 12 views
6

Come posso modificare il valore di una risorsa statica WPF in fase di runtime?Modificare il valore di una risorsa statica wpf

Ho le seguenti risorse

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

che alcuni TextBlocks riferimento

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

poi a seconda dell'oggetto di essere vincolato al controllo vorrei modificare i formati. Ho installato proprietà del controllo come segue:

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

quindi prima di associare i set ogni stringa.

Tuttavia, non funziona, qualcuno suggerisce whynot?

Cheers

risposta

3

In realtà funziona bene. Ma l'interfaccia utente non viene aggiornata, in quanto le chiavi delle risorse non vengono osservate.

Non è consigliabile utilizzare le risorse statiche se si desidera modificare i collegamenti. Usa invece i binding regolari, con INotifyPropertyChanged sulle proprietà, consentendo all'IU di osservare le modifiche.

0

Sono d'accordo con Claus poiché la risorsa statica non verrà osservata, l'interfaccia utente non cambierà. Vorrei suggerire provare modificando risorsa statica in dinamica delle risorse

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

Viene visualizzato un errore che dice: Errore 4 Non è possibile impostare "DynamicResourceExtension" nella proprietà "StringFormat" di tipo "Binding". Un 'DynamicResourceExtension' può essere impostato solo su DependencyProperty di DependencyObject. –

+0

ohh Giusto, ha senso. In questo caso non sarai in grado di applicare la mia soluzione. Funzionerà solo per DependencyProperty –

3

Il modo più ovvio è quello di passare ad usare DynamicResource che è quello che è per.

Problemi correlati