整个解决方案的界面,有多个UserControl,全部在A项目;
UserControl上面的Conten、Text,还有控件的Style,全部集成在A项目两个的ResourceDictionary中,一个为样式,一个为内容;在A项目中使用:
         UCConfig myuc = new UCConfig ();
            
         this.cavasConfig.Children.Add(myuc );  
没有问题;新增加一个B项目,添加对A项目的引用,然后使用以下代码:
           A.UCConfig myuc = new UCConfig ();
            
          B.cavasConfig.Children.Add(myuc ); 
总会抛出异常:
           未处理的XamlParseException  无法创建在程序集“A, Version=1.0.0.0,Culture=neutral……
 

解决方案 »

  1.   

    B.cavasConfig.Children.Add(myuc ); 
    B项目也有这个方法?
      

  2.   

    没有,这样写是为了方便理解;实际上是:this.cavasConfig.Children.Add(myuc ); 两个Xaml中都有Cavas,名字都是cavasConfig。
      

  3.   

    如果命名上的问题,你改一下看看吧.
    我刚测试了一下.
    在A里建一个用户控件.
    在B里引用并示例化,并添加到Grid的Children里,没有问题.
      

  4.   

    你A的用户控件有没有用到ResourceDictionary? 如果没有使用资源的话,是可以的。
      

  5.   

    我的项目用到ResourceDictionary了(就是在Themes\Generic.xaml里写控件),但是没有问题。
      

  6.   

    补充一下,我是这样做的:
      一、B 项目添加引用,引用A项目;
      二、在B的xmal中,增加:xmlns:Style="clr-namespace:A;assembly=A";
      三、接下来就是一楼的内容了;查了一下资料,很多说跟ResourceDictionary.xaml这个文件的“复制到输出目录”、“生成操作有关”,但尝试了,仍没有解决。
      
      

  7.   

    ResourceDictionary.xaml?是不是你的用法有问题?ResourceDictionary不是这么用的。
      

  8.   

    几天没有上,耽搁了!最后问题解决了,总结一下:
    一、资源字典可以集成到程序集,也可以不集成,作为外部资源;二、我实现的过程是:
        1、ResourceDictionary生成操作仍然是Page;
        2、将ResourceDictionary复制到B项目根目录;
        3、B项目的启动窗口为WindowMainForm,在其InitializeComponent之前,先LoadResources,将资源
           加入到当前的Resources里面;
        4、在WindowMainForm.xaml中,增加ResourceDictionary.MergedDictionaries;
        5、实现资源共享,搞定。三、资源的有效范围很重要,定义不同,使用范围也不同;如:
        引用 <ResourceDictionary Source="/程序集A;Component/MYDictionary.xaml"/>
        全局 <Application.Resources>;
        窗口 <Window.Resources>;
        布局 <Grid.Resources>;