FindResource在自定义控件DLL中不起作用

时间:2014-05-16 06:27:55

标签: c# wpf dll controls resourcedictionary

虽然我还在学习WPF,但我还遇到了另一个问题。我有一个自定义控件类型的DLL。我已经实现了我的基本控件,并且我有几个控件来自这个基础;从不使用基本控件。问题是每当我调用FindResource或TryFindResource时它总是失败。我有一个单独的字典,我在我的Themes / Generic.xaml文件中合并:

Gernieric.xaml

<ResourceDictionary.MergedDictionaries>
    <ResourceDictionary Source="/DllProject;component/Themes/NewResource.xaml" />
    <!-- I've tried several other ways for the Source format, i.e. pack:... -->
</ResourceDictionary.MergedDictionaries>

现在我尝试在派生控件构造函数中设置派生控件的样式,而当时控件不在可见的画布或面板上。我还想将控件的VisualBrush导出为BitmapSource。当我将NewResource.xaml放入EXE项目(它不属于)时,所有代码都正常工作。我已经阅读了有关在资源字典中添加虚拟标记以及将所有代码放在Generic.xaml文件中的文章。就像我说的,如果将xaml文件移动到主EXE,所有这些都有效。就好像DLL甚至没有加载xaml文件,甚至知道在控件位于可见窗口之前有声明的内容。

我的基本控件样式(NewResource.xaml):

<Style TargetType="{x:Type local:MyDerivedControl}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:MyDerivedControl}">
                <Grid>
                    <Path x:Name="MyPath" Style="{TemplateBinding DepProp}" />
                    <TextBlock x:Name="Text" HorizontalAlignment="Center" VerticalAlignment="Center" Text="{TemplateBinding Text}"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

在互联网上做了大量研究后,似乎WPF放弃了DLL和资源。

1 个答案:

答案 0 :(得分:1)

我找到了有效的答案。基本上更改x:Key以包含ComponentResourceKey。可以直观地了解完整描述here