WPF - 资源未从Generic.xaml加载

时间:2011-04-12 17:10:15

标签: wpf custom-controls resourcedictionary generic.xaml

主题\ Generic.xaml:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="WPF Commons;component/Controls/Layout/Foo/FooItem.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

控制\布局\富\ FooItem.xaml:

<Style TargetType="{x:Type l:FooItem}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type l:FooItem}">
                <Border>
                    <ContentPresenter ContentSource="Header" />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>


如果我将整个样式复制到我的usercontrol资源中,它可以正常工作。但是,如果我不这样做,则usercontrol显示为空。在Expression Blend 4中,我右键单击并选择Edit Template&gt;,但它不会让我选择Edit a Copy...,这会让我相信某些内容严重错误并且Generic.xaml不是正确装载。我认为它是Generic.xaml,因为如果我删除MergedDictionary调用并将xaml样式直接复制/粘贴到Generic.xaml中,它仍然无效。

2 个答案:

答案 0 :(得分:31)

我会猜测你改变了你的AssemblyInfo.cs文件并更改(或删除)了以下行:

[assembly: ThemeInfo(
    ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
    //(used if a resource is not found in the page, 
    // or application resource dictionaries)
    ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
    //(used if a resource is not found in the page, 
    // app, or any theme specific resource dictionaries)
)]

你需要告诉大会你的ThemeInfo。 :)

答案 1 :(得分:1)

从我的博客中复制:http://zoomicon.wordpress.com/2012/06/10/what-to-do-if-generic-xaml-doesnt-get-loaded-for-wpf-control/

  

在您需要的Properties \ AssemblyInfo.cs的开头(注意Silverlight中没有使用/需要这个):   使用System.Windows;

     

...

     

请注意,如果项目未在解决方案资源管理器中显示“属性”节点,则必须使用正确的模板创建新项目(对于WPF自定义控件),或者右键单击项目,选择“属性”,然后按下Assembly Information按钮并输入一些虚拟值,然后单击OK以创建Properties节点(也创建一个Properties子文件夹和AssemblyInfo.cs文件)。

     

您可以展开(下拉)解决方案资源管理器中的特殊“属性”节点,然后打开AssemblyInfo.cs并添加上述内容(如果缺少)