如何将一个资源字典拆分为两个?

时间:2016-03-31 08:26:47

标签: c# .net wpf

我有一个包含相当大的资源字典的类库,我认为我的项目组织可以通过将其拆分为更小的更具体的文件来改进,例如一个用于颜色等的控件样式。我的问题是一些字典使用其他字段(例如控件样式使用颜色)。

我的问题是如何将一个资源字典拆分为两个,然后在另一个字典中使用一个字典?

以下是完整字典的(部分)外观(未分开)

<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>

2 个答案:

答案 0 :(得分:1)

您是否考虑过使用<ResourceDictionary.MergedDictionaries>

您可以使用它来定义多个词典,这似乎是您正在寻找的。

答案 1 :(得分:0)

感谢@Shaamaan,我有理想的行为。我将主资源字典拆分为较小的文件,然后创建一个名为“资源”的新文件。如下:

<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>

然而,我能够使用它的唯一方法是将所有对颜色的引用列为动态资源而不是静态资源。