Удалите словарь ресурсов и добавьте еще один в WPF - PullRequest
5 голосов
/ 13 сентября 2011

У меня есть два ресурсных словаря. Один называется ResDictGlass.xaml, а другой ResDictNormal.xaml. Оба имеют одинаковые свойства и разные значения. Например

ResDictGlass.xaml имеет один стиль, подобный этому:

<Style x:Key="StyleTitleText" TargetType="TextBlock">
    <Setter Property="FontFamily" Value="Arial" />
    <Setter Property="FontSize" Value="14"/>
    <Setter Property="Foreground" Value="Green" />
</Style>

Тот же стиль в ResDictNormal.xaml:

<Style x:Key="StyleTitleText" TargetType="TextBlock">
    <Setter Property="FontFamily" Value="Tahoma" />
    <Setter Property="FontSize" Value="14"/>
    <Setter Property="Foreground" Value="WhiteSmoke" />
</Style>

Я установил текстовый блок в xaml как:

 <TextBlock Style="{DynamicResource StyleTextblock}" Text="Prod.Code" VerticalAlignment="Top" />

Я хочу переключаться между этими стилями во время выполнения. Что я делаю так:

           case "normal":
               ResourceDictionary ResDict1 = new ResourceDictionary();
               ResDict1.Source = new Uri("/ResDictNormal.xaml", UriKind.RelativeOrAbsolute);
               Application.Current.Resources.MergedDictionaries.Add(ResDict1);
               break;

           case "flip":
               ResourceDictionary ResDict2 = new ResourceDictionary();
               ResDict2.Source = new Uri("/ResDictGlass.xaml", UriKind.RelativeOrAbsolute);
               Application.Current.Resources.MergedDictionaries.Add(ResDict2);
               break;

Это правильный подход? Должны ли мы удалить текущий словарь, а затем добавить словарь?

1 Ответ

4 голосов
/ 13 сентября 2011

Да, вы хотели бы, чтобы в приложении был слит любой из двух словарей, а не оба.В противном случае неоднозначные ресурсы выдадут ошибку при их ссылке.

Также помните, что вам может потребоваться использовать DynamicResource вместо StaticResource, если темам необходимо динамически обновлять пользовательский интерфейс (т. Е. Без перезагрузки всего пользовательского интерфейса).

Дайте мне знать, если это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...