Как изменить значение XAML с помощью C #? - PullRequest
0 голосов
/ 26 марта 2012

У меня есть файл стиля для стилей в WPF XAML с именем Brushes.xaml, в котором хранятся все цвета для WPF.

Код здесь:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">    
    <Color x:Key="DefaultColor">SteelBlue</Color>
    <Color x:Key="LightDefaultColor">LightSteelBlue</Color>
</ResourceDictionary>

Я хочу изменить значениеDefaultColor с использованием кода C #.

Ответы [ 2 ]

2 голосов
/ 26 марта 2012

Используйте расширение DynamicResource вместо расширения StaticResource во всех ссылках на ключи, которые могут изменяться во время выполнения.

Затем вы можете использовать код, подобный следующему, чтобы изменить значение.

Application.Current.Resources["Default Color"] = System.Windows.Media.Colors.Red;

Это можно сделать для каждого объекта ...

public MyWindow()
{
    InitializeComponent();
    this.Resources["Default Color"] = System.Windows.Media.Colors.Red;
    PART_DynamicButton.Resources["Default Color"] = System.Windows.Media.Colors.Red;
}

Это более высокая производительность, чем очистка всего словаря объединенных ресурсов и добавление нового, если вам нужно только изменить несколько значений.

Просто помните, что расширение DynamicResource работает только для DependencyProperties, а объекты Freezable, созданные в Xaml, обычно замораживаются, что предотвращает изменение их свойств DependencyProperties. Поэтому не пытайтесь изменить цвет SolidColorBrush, если кисть была создана в xaml.

Вот обходной путь

<! -- Xaml -->
<SolidColorBrush x:Key="App_Page_Background" Color="White"/>

<Page Background="{DynamicResource App_Page_Background}"/>

// C# code
Application.Current.Resources["App_Page_Background"] = new SolidColorBrush(Colors.Red);
0 голосов
/ 26 марта 2012

Вместо того, чтобы изменять содержимое XAML, вы должны создать один файл XAML для каждой темы.Затем вы можете изменить тему во время выполнения, как это:

ResourceDictionary skin = new ResourceDictionary();
skin.Source = new Uri(@"" + themeName + ".xaml", UriKind.Relative);
Application.Current.Resources.MergedDictionaries.Clear();
Application.Current.Resources.MergedDictionaries.Add(skin);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...