Как объединить разные ресурсы в одном App.xaml? - PullRequest
1 голос
/ 27 июня 2019

У меня есть длинный код App.xaml, который содержит код для настраиваемого настраиваемого окна, загруженного из Интернета.

<Application x:Class="MyProject.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:MyProject"
             xmlns:sw="clr-namespace:MyProject.StyleableWindow"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
    <SolidColorBrush x:Key="WindowColor" Color="Red"/>
    <SolidColorBrush x:Key="WindowBackColor" Color="#FFC3C3C3"/>
    <SolidColorBrush x:Key="WindowForeColor" Color="Black"/>
    <SolidColorBrush x:Key="WindowForeHighlightColor" Color="WhiteSmoke"/>
................
................
................
................
            <Setter Property="Background" Value="Black"/>
            <Setter Property="BorderBrush" Value="Red"/>
            <Setter Property="Template" Value="{StaticResource WindowTemplate}"/>
        </Style>

Вчера я скачал пользовательский элемент управления Toggle Button. Для того, чтобы заставить его работать, я попытался объединить приведенный ниже код в App.xaml

    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="SwitchTypeToggleButton.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>

Но это не работает. Я продолжаю получать следующую ошибку:

Каждый словарь должен иметь связанный ключ

Код управления моей кнопкой переключения (хранится в MyProject> Папка1> Папка2)

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Style x:Key="SwitchTypeToggleButton"
           TargetType="{x:Type ToggleButton}">

        <Style.Resources>
            <Color x:Key="Color.Additional.LightGrey">#989EA8</Color>
            <Color x:Key="Color.Additional.MediumGrey">#61656B</Color>
............
............

Что мне нужно сделать, чтобы избавиться от ошибки? Любая помощь приветствуется.

1 Ответ

1 голос
/ 27 июня 2019

Ресурсы в app.xaml должны выглядеть следующим образом:

<Application.Resources>    
  <ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
      <ResourceDictionary Source="SwitchTypeToggleButton.xaml" />
    </ResourceDictionary.MergedDictionaries>
    <SolidColorBrush x:Key="WindowColor" Color="Red"/>
    ...
    <Setter Property="Template" Value="{StaticResource WindowTemplate}"/>
  </ResourceDictionary>      
</Application.Resources>

Причина в том, что Application.Resources на самом деле всегда должно быть ResourceDictionary. Пока вы используете «простые» ресурсы, ResourceDictionary создается неявно. Но как только вы захотите объединить другой ResourceDictionary, вы должны явно указать содержащий его.

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