在单独的dll WPF中设置资源

时间:2012-10-19 11:07:06

标签: c# wpf .net-assembly resourcedictionary

我想在一个独立的dll中包含一组样式,可以从许多不同的WOF类中引用它们来定义常见的样式。

我创建了独立的dll,并尝试引用它,但遇到了问题。

以下是独立dll的代码:

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

        <Style x:Key="myStyle" TargetType="Button">
            <Setter Property="Background" Value="Orange" />
            <Setter Property="FontStyle" Value="Italic" />
            <Setter Property="Padding" Value="8,4" />
            <Setter Property="Margin" Value="4" />
        </Style>

    <!-- store here your styles -->
</ResourceDictionary> 

这是我试图引用它的地方:

<src:GX3ClientPlugin.Resources>
    <ResourceDictionary Source="pack://application:,,,/GX3StyleResources.dll;component/GX3StyleResources.xaml" />
</src:GX3ClientPlugin.Resources>

运行时我得到以下异常:

  

无法加载文件或程序集“GX3StyleResources.dll,Culture = neutral”或其依赖项之一。系统找不到   指定的文件。

任何想法?

2 个答案:

答案 0 :(得分:5)

我在一些项目中也这样做,我所做的是将dll作为参考添加到我的项目中,然后我使用包Uri,但我没有指定扩展名.dll。我只使用程序集名称(通常没有.dll)

Source="pack://application:,,,/GX3StyleResources;component/GX3StyleResources.xaml"

答案 1 :(得分:0)

我之前也遇到过这个问题。如果你从未在实际的C#代码中实际引用该程序集中的任何内容,有时(我不能确定的标准)编译器/运行时/两者的某种组合只是不加载或复制程序集。 / p>

将一个类添加到资源程序集文件中,该文件执行SOMETHING / any - 不要将其留空,否则在某些情况下它会被优化:

public static class Resources
{
    public static void Init()
    {
        Console.Write(string.Empty);
    }
}

然后,从您的应用程序中,先在App启动方法中调用Resources.Init(),然后再确保加载资源程序集。

这是一个肮脏的肮脏的黑客,但它的确有效。

相关问题