得到一个ComponentResourceKey工作?(Getting a ComponentRes

2019-07-18 00:45发布

我建立几个组件一个WPF应用程序,我想分享其中的资源字典。 这需要一个ComponentResourceKey 。 我建立了一个小的演示,测试出CRK,我似乎无法得到它的工作。

我演示有两个项目,一个WPF项目,称为演示 ,以及一个名为常见的DLL。 通用项目有一个文件夹,名为主题 。 它包含了我的资源字典,generic.xaml。 以下是资源字典的文字:

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:Common" >

    <SolidColorBrush 
        x:Key="{ComponentResourceKey TypeInTargetAssembly={x:Type local:SharedResources}, ResourceId=RedSolidBrush}" 
        Color="Red"/>

</ResourceDictionary>

通用还包含一个类中调用SharedResources.cs。 它包含引用在字典中的画笔资源的属性:

public static ComponentResourceKey RedSolidBrush
{
    get { return new ComponentResourceKey(typeof (SharedResources), "RedSolidBrush"); }
}

最后,在我的演示项目的主窗口引用画笔资源来填充矩形:

<Window x:Class="ComponentResourceKeyDemo.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:res="clr-namespace:Common;assembly=Common"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <Rectangle Height="100" Width="100" Stroke="Black" Fill="{DynamicResource {ComponentResourceKey TypeInTargetAssembly={x:Type res:SharedResources}, ResourceId=RedSolidBrush}}" />
    </Grid>
</Window>

我找不到它不工作的原因。 它编译于2008年VS和混合罚款,但资源不被调用。 我唯一的线索是在Blend中的错误信息:

The Resource "{ComponentResourceKey ResourceId=RedSolidBrush, TypeInTargetAssembly={x:Type res:SharedResources}}" could not be resolved.

任何想法,为什么这是不工作? 谢谢你的帮助。

Answer 1:

我发现我的问题。 我混淆了资源字典里面的资源ID组件资源键。 换句话说,我的组件资源键是一样的资源ID。 我改变了我的静态属性这样的:

public static ComponentResourceKey RedBrushKey
{
    get {return new ComponentResourceKey(typeof(SharedResources), "RedSolidBrush"); }
}

属性名称现在是RedBrushKey,而不是RedSolidBrush。 关键是现在的工作。



文章来源: Getting a ComponentResourceKey to Work?