2012-01-14 2 views
6

Как я могу изменить значение статического ресурса WPF во время выполнения?Изменение значения статического ресурса wpf

У меня есть следующие ресурсы

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

который некоторые TextBlocks ссылки

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

затем в зависимости от объекта, который будет связан с контролем я хотел бы изменить форматы. Я создал свойство в элементе управления следующим образом:

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

затем перед привязкой я установить каждую строку.

Однако это не сработает, кто-нибудь предлагает whynot?

Cheers

ответ

3

На самом деле все работает отлично. Но пользовательский интерфейс не обновляется, так как ключи ресурсов не соблюдаются.

Нельзя использовать статические ресурсы, если вы хотите изменить привязки. Вместо этого используйте регулярные привязки, с INotifyPropertyChanged по свойствам, позволяя пользовательскому интерфейсу наблюдать изменения.

0

Я согласен с Клаусом, поскольку статический ресурс не будет соблюден, ваш пользовательский интерфейс не изменится. Я хотел бы предложить попробовать, изменяя статический ресурс в динамический ресурс

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

Я получаю сообщение об ошибке: Ошибка 4 «Свойство DynamicResourceExtension» не может быть установлено в свойстве «StringFormat» типа «Связывание». «DynamicResourceExtension» может быть установлен только в DependencyProperty объекта DependencyObject. –

+0

ohh Правильно, имеет смысл. В этом случае вы не сможете применить мое решение. Он будет работать только для DependencyProperty –

3

Наиболее очевидным способом является переход к использованию DynamicResource, что это то, что он нужен.

Смежные вопросы