2017-01-03 65 views
2

我在共享项目(resource dictionary in shared project)中进行了自定义控件。XAML设计人员无法找到资源

一切工作正常运行时,XAML设计但是抛出异常:

无法找到资源 'mycontrol.xaml'。

问题发生时加载样式控制:

public class MyControl: Control 
{ 
    public MyControl() 
    { 
     Resources = new ResourceDictionary() { Source = new Uri("pack://application:,,,/mycontrol.xaml") }; 
     Style = (Style)Resources["somekey"]; 
    } 
} 

为什么它的工作原理在运行时和设计时没有?

我可以检测设计时间,但是该怎么做呢?

回答

4

从其他项目加载xaml文件时,WPF设计器似乎有问题。您可以尝试使用此批注加载XAML文件:

pack://application:,,,/PROJECTNAMESPACE;component/mycontrol.xaml 
+0

如果资源位于您不需要指定命名空间相同的组件。看看https://msdn.microsoft.com/en-US/library/aa970069(v=vs.110).aspx#Resource文件包URI – c0d3b34n

+0

令我惊讶的是,这种语法让设计师感到高兴。我之前使用它,但它需要组装,在共享项目的情况下是一个问题,但不是你的问题;)。谢谢。 – Sinatr

0

我会尝试

Uri res = new Uri("pack://siteoforigin:,,,/mycontrol.xaml", UriKind.Relative); 
Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = res }); 
+0

这肯定是错误的,因为'siteoforigin'是源文件的XAML站点的* pack URI,存储在启动可执行程序集的位置*([msdn](https://msdn.microsoft.com/en -us/library/aa970069(v = vs.110).aspx)),除非你也建议在外部存储xaml。 – Sinatr

+0

aaaaah,我的错...... :-) – c0d3b34n