Как использовать стили из отдельных файлов xaml

У меня есть файл styles.xaml, в котором указан набор цветов. Эти цвета определяют, как отображаются определенные элементы внутри одной части приложения, и, следовательно, используются через конвертер.

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

Мне нужно каким-то образом включить файл styles.xaml в файл xaml, определяющий кнопки переключения? Или я могу связать напрямую эти значения цвета?

Ответ 1

Добавить styles.xaml в App.xaml

 <Application.Resources>
    <ResourceDictionary >
        <ResourceDictionary.MergedDictionaries >       
            <ResourceDictionary Source="styles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Ответ 2

Примечание. Атрибуция для следующего содержания/ответа должна идти в @Chris Schaller. Этот контент ответа был первоначально опубликован как редактирование @chameleon86 answer и был отклонен (см. Также this meta). Однако я думаю, что это ценное содержание, и поэтому я "перепродаю" его.

Чтобы сделать определения в styles.xaml доступными для всего XAML в приложении, добавьте styles.xaml в App.xaml

<Application.Resources>
   <ResourceDictionary >
        <ResourceDictionary.MergedDictionaries >  
            <ResourceDictionary Source="styles.xaml"/>
        </ResourceDictionary.MergedDictionaries>
        <!-- You can declare additional resources before or after Merged dictionaries, but not both -->
        <SolidColorBrush x:Key="DefaultBackgroundColorBrush" Color="Cornsilk" />
        <Style x:Key="DefaultBackgroundColor" TargetType="TextBox">
            <Setter Property="Background" Value="{StaticResource DefaultBackgroundColorBrush}" />
        </Style>
    </ResourceDictionary>
</Application.Resources>

Чтобы понять, как это работает, во время выполнения ваше окно, страница или элемент управления будут существовать как дочерние элементы отображаемого дерева приложения.

В вашем первоначальном вопросе отмечается:

"Эти цвета определяют, как определенные элементы внутри одной части приложения..."

Если вам нужны только эти ресурсы стиля для некоторых страниц или окон xaml, но не для всех, то вы все равно можете использовать этот шаблон для объединения локальных ресурсов для окна или для сеток или других элементов управления напрямую.

  • Обратите внимание, что это делает эти стили доступными только для дочерних элементов элемента, которые вы объявили в словаре ресурсов.

Посмотрите, насколько простым является область привязки стиля к одной сетке для использования:

<Grid>
    <Grid.Resources>
        <ResourceDictionary >
            <ResourceDictionary.MergedDictionaries >       
                <ResourceDictionary Source="styles.xaml"/>
            </ResourceDictionary.MergedDictionaries>
            <!-- You can declare additional resources before or after Merged dictionaries, but not both -->
        </ResourceDictionary>
    </Grid.Resources>
    <!--
        Grid Content :)
      -->
</Grid>