XAML设计师无法定位资源。

4

我在共享项目中有一个自定义控件(共享项目中的资源字典)。

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

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

当加载控件样式时就会出现这个问题:

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

为什么它在运行时可以工作,但在设计时却不行?

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

2个回答

5

在从其他项目加载xaml文件时,WPF设计器似乎存在问题。您可以尝试使用以下注释来加载xaml文件:

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

如果资源位于同一程序集中,则无需指定命名空间。请参阅https://msdn.microsoft.com/zh-cn/library/aa970069(v=vs.110).aspx#Resource File Pack URIs - c0d3b34n
令我大为惊喜的是,这种语法让设计师感到高兴。我之前一直在使用它,但它需要汇编,对于共享项目来说是个问题,但这不是你的问题 ;)。谢谢。 - Sinatr

0

我会尝试

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

这绝对是错误的,因为siteoforigin用于XAML源文件的包URI,存储在可执行程序集启动的位置msdn),除非您还建议将xaml外部存储。 - Sinatr
啊啊啊,是我自己的错... :-) - c0d3b34n

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接