虽然我还在学习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和资源。