2016-03-31 4 views
0

У меня есть библиотека классов, которая содержит довольно большой словарь ресурсов, и я думаю, что организация моего проекта может быть улучшена путем разделения его на более мелкие более конкретные файлы, например, один для стилей управления один для цвета ect. Моя проблема в том, что в некоторых словарях используются поля других (например, стили управления используют цвета).Как я могу разделить один словарь ресурсов на два?

Мой вопрос: как я могу разделить один словарь ресурсов на два, а затем использовать один словарь в другом?

Вот что (часть) полный словарь выглядит (не отделились)

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:system="clr-namespace:System;assembly=mscorlib"> 

    <SolidColorBrush x:Key="backgroundColour" Color="#FF1D1D1D"/> 
    <SolidColorBrush x:Key="foregroundColour" Color="#FFEAEAEA"/> 
    <SolidColorBrush x:Key="textColour" Color="White"/> 
    <SolidColorBrush x:Key="borderColour" Color="#FFF31515"/> 
    <SolidColorBrush x:Key="mouseOverBackgroundColour" Color="#E59400"/> 
    <SolidColorBrush x:Key="mouseOverForegroundColour" Color="White"/> 
    <SolidColorBrush x:Key="mousePressedBackgroundColour" Color="OrangeRed"/> 
    <SolidColorBrush x:Key="mousePressedForegroundColour" Color="White"/> 

    <Style x:Key="DriveButtonStyle" TargetType="{x:Type Button}"> 
     <Setter Property="Background" Value="{DynamicResource backgroundColour}" /> 
     <Setter Property="Foreground" Value="{DynamicResource foregroundColour}" /> 
     <Setter Property="FontSize" Value="16" /> 
     <Setter Property="FontFamily" Value="Calibri Light" /> 
     <Setter Property="SnapsToDevicePixels" Value="True" /> 
     <Setter Property="Margin" Value="2" /> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type Button}"> 
        <Border Background="{TemplateBinding Background}" BorderBrush="Gray" BorderThickness="1" > 
         <ContentPresenter x:Name="MyContentPresenter" Content="{TemplateBinding Content}" HorizontalAlignment="Center" VerticalAlignment="Center"/> 
        </Border> 

        <ControlTemplate.Triggers> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter Property="Background" Value="{DynamicResource mouseOverBackgroundColour}" /> 
          <Setter Property="Foreground" Value="{DynamicResource mouseOverForegroundColour}" /> 
         </Trigger> 

         <Trigger Property="IsPressed" Value="True"> 
          <Setter Property="Background" Value="{DynamicResource mousePressedBackgroundColour}" /> 
          <Setter Property="Foreground" Value="{DynamicResource mousePressedForegroundColour}" /> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

    <Style x:Key="DriveImageStyle" TargetType="{x:Type Image}"> 
     <Setter Property="Width" Value="30" /> 
     <Setter Property="Height" Value="30" /> 
     <Setter Property="Margin" Value="2" /> 
     <Setter Property="HorizontalAlignment" Value="Left" /> 
    </Style> 

    <Style x:Key="DriveLabelStyle" TargetType="{x:Type Label}"> 
     <Setter Property="VerticalAlignment" Value="Center" /> 
     <Setter Property="HorizontalAlignment" Value="Center" /> 
     <Setter Property="Foreground" Value="{DynamicResource foregroundColour}" /> 
     <Setter Property="FontSize" Value="15" /> 
     <Setter Property="FontFamily" Value="Calibri Light" /> 
    </Style> 

+1

Не зная, как выглядит ваш словарь, трудно дать определенный ответ, но вы изучили использование ''? – Shaamaan

+0

Я изучу объединенные словари. Я думал, что они предназначены для использования там, где вы хотите использовать части двух * отдельных * словарей. Я добавил образец словаря, который я пытаюсь разбить. – Timmoth

+0

Хорошо, неважно, спасибо за помощь Шаамаану. Я думаю, теперь у меня это работает. MergedDictionaries - это ключ ... – Timmoth

ответ

1

Вы смотрели в использовании <ResourceDictionary.MergedDictionaries>?

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

0

Благодаря @Shaamaan у меня есть желаемое поведение. Я разделить основной словарь ресурсов в файлы меньшего размера, а затем создал новый файл под названием «Resources» следующим образом:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:system="clr-namespace:System;assembly=mscorlib"> 

    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="Buttons.xaml"/> 
     <ResourceDictionary Source="Colours.xaml"/> 
     <ResourceDictionary Source="Controls.xaml"/> 
    </ResourceDictionary.MergedDictionaries> 

</ResourceDictionary> 

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

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