PlainView不会加载与componentResourceKey和resourceid相关的xaml页面

时间:2012-01-12 16:27:56

标签: wpf styles componentresourcekey

我有一个外部库来保存我为PlainViews定义样式的所有主题。扩展viewbase的plainview类位于另一个项目中。 我的应用程序不会加载普通视图的xaml。好像它找不到与PlainView相关的资源ID

这是定义普通视图的xaml

<Style x:Key="{ComponentResourceKey 
        TypeInTargetAssembly={x:Type Common:PlainView},
        ResourceId= PlainViewRsx}" 
        TargetType="{x:Type ListView}" 
        BasedOn="{StaticResource {x:Type ListBox}}">
</Style>

后面的PlainView代码在另一个项目中定义。

1 个答案:

答案 0 :(得分:0)

我不确定我是否理解你的问题(或者即使你仍然有这个问题),所以我告诉你我的方法,我想我需要类似的东西:

  1. 我在外部装配中有我的主题(每个主题都表示为 资源字典),可以通过在运行时交换类的资源字典来改变
  2. 资源的密钥存储在另一个程序集中
  3. 访问主题和资源再次使用不同的程序集
  4. 首先确保您在所有需要的项目中拥有所有必需的参考。

    存储密钥的类:

    public class CoreResourceKeys
    {
          public static readonly string BrushMyBrush = "MyBrush";
          public static ComponentResourceKey Brush_MyBrush
          {
              get
              {
                  return new ComponentResourceKey(typeof(CoreResourceKeys), CoreResourceKeys.BrushMyBrush);
              }
          }
    }
    

    我的主题文件看起来像这样:

    <ResourceDictionary xmlns=[...]
        xmlns:resources="clr-namespace:AssemblyThatStoresTheKeys;assembly=CoreResourceKeys">
        <SolidColorBrush x:Key="{ComponentResourceKey 
            TypeInTargetAssembly={x:Type resources:CoreResourceKeys}, 
            ResourceId={x:Static resources:CoreResourceKeys.BrushMyBrush}}"  
        Color="DarkMagenta"/>
    </ResourceDictionary>
    

    我想要使用画笔的控件/页面如下所示:

    <UserControl x:Class=[...] 
        xmlns:resources="clr-namespace:AssemblyThatStoresTheKeys;assembly=CoreResourceKeys">
        <TextBlock Background="{DynamicResource {x:Static resources:CoreResourceKeys.Brush_MyBrush}}" Text="The Shire"/>
    

    这篇博文给了我很多帮助:MSDN Support Forum - Loading Styles from My Assembly

    我不确定这对你有帮助吗?如果没有,请尝试更详细地描述您的问题。