WPF中跨项目调用窗体导致资源丢失,求解决

我有一个解决方案TINI,其中有两个项目,一个项目为主程序MAIN,一个为即时通讯程序CHAT,现在我遇到这样一个问题:

我再主程序中引用了CHAT项目,同时也using了CHAT的名称空间,但是当我实例化CHAT中的任何一个窗体时,都会报错 在“System.Windows.StaticResourceExtension”上提供值时引发了异常。” ,我仔细的看了错误跟踪,发现是找不到某一个资源了,但是这个项目单独运行的时候是没有问题的,资源都正常,我想可能是我引用CHAT项目时其中的APP.xaml并没有引用过来或者被主程序的APP.xaml给覆盖了,所以导致了这个问题,但是我没有办法解决,希望大家能帮帮忙。

我通过一个按钮调用,代码为:

CHAT.MainWindow frm_mm = new CHAT.MainWindow();
frm_mm.Show();

第1个回答  2012-01-31
的确,正如楼主所说,被引用的项目的app实效了。因为一个解决方案只允许有一个app,即控制全局样式的东东。你把chat的app里的样式都提取出来,放到一个ResourceDictionary里面。然后在主项目中引用(或者说合并)这个ResourceDictionary就行了。
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source= "/程序集A;Component/MYDictionary.xaml "/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
或直接引用
<Application.Resources>
<ResourceDictionary Source= "/程序集A;Component/MYDictionary.xaml "/>
</Application.Resources>追问

OK,这个问题经过您的指点已经解决了,但是还有一个问题,现在我的资源字典已经处理完毕了,也就是说我的样式全部都是正确的,但是会提示一个新的异常“System.Windows.Baml2006.TypeConverterMarkupExtension”,错误跟踪说无法找到图片文件,如“找不到资源“images/only.png”,同样是单独运行的时候是正常的,一旦实例化窗体就会出错,我猜想可能是各项目间调用的包的名称不同导致的,请问是否有解决的方法?谢谢您的指教!

追答

图片等资源的路径与资源字典的路径格式一致就行。
我尝试了下应该是行的。

本回答被提问者采纳
第2个回答  2012-10-11
碰到类似为题, 使用DynamicResource替换Static...解决的

WPF中Closing窗体时调用Hide()方法异常
假设我们的Window类型的win 时一个需要隐藏的窗口 企图关闭该窗体时其会被隐藏 点击主窗口上的btnShowWin 按钮时窗体会再次被显示 我们实现一个Delegate 其代理的方法将异常窗体 delegate void WillHide(); \/\/ private WillHide willHide; \/\/ this willHide = new WillHide(this HideWin...

WPF中想在一个窗口中调用另一个窗口的控件(DataGrid),怎么实现
例如有个两个窗体window1 window2 在window2里有个name=datagrid 的 DataGrid 首先在window2的后台里把datagrid公开出去 public DataGrid WinDataGrid { get { return datagrid; } set { datagrid = value; } } 然后在window1的后台去实例化window2,在调用datagrid即可 window2 window = new window2...

wpfprism一个窗体调用另一个画面的方法
1、使用事件聚合:如果两个视图之间存在父子关系或区域关系,可以使用事件聚合来实现wpfprism一个窗体调用另一个画面。2、使用服务定位:通过服务定位的方式,可以在应用程序中全局访问到需要的视图模型,通过依赖注入或使用ServiceLocator实现wpfprism一个窗体调用另一个画面。3、使用命令绑定:如果两个视图之间...

WPF程序 当关闭一个窗体后,重新打开报错 关闭窗口之后无法设置 Visibi...
这很简单呀。在主页后台设置一个属性bool型的就成。你打开窗体后,如果默认是false,你设置为true。如果是ture么,你就在打开窗体的时候ShowDialog报打开错误的指示框。

WPF在控制窗体的透明度,但是窗体变成黑色了,并没随时间变化而透明!请...
是你没把主窗体的AllowsTransparency属性设为True吧。WPF窗体透明除了要将Background属性设为Transparent外,还需要将AllowsTransparency属性设为True。但是如果你的WPF窗体使用了WindowsFormHost,那就不能将AllowsTransparency设为True了,会导致WindowsFormHost里的WinForm控件全是黑色。这时候只能通过另一种比较深...

用vs2008创建的wpf项目。。 居然显示不出来窗体。。。 可以直接运行...
看楼主的代码,只放了一个空白的grid在窗体上,运行后当然也是空白了。提醒楼主一下,新建项目的时候可以直接选新建WPF项目,控件什么的可以向传统项目那样拖放上去,然后需要在设置一下,比如说gird,那么最好设置需要显示的列等等。

wpf调用上层文件夹里的图片不能正常显示的问题
你的图片添加到项目没有?属性里面设置为“资源”没有?上面的3点...是省略号还是上层文件夹的意思,如果是上层文件夹,应该是两个点。

WPF的用户控件怎么访问主窗体的控件?求高手
private void lbl_MenuName_MouseLeftButtonDown(object sender, MouseButtonEventArgs e){\/\/frm_Manage为主窗体,Grid_MenuChildren为主窗体的一个控件var frm = (this.Parent as frm_Manage);frm.Grid_MenuChildren.Children.Clear();}上面这样写的话会报错:frm为null。---解决方案---使用事件。主...

C# winfrom 如何使用 WPF 中的 Grid 控件 求方法
有什么特别的用途吗?可以按如下步骤处理:1、在项目中添加一个用户控件(WPF),添加Grid或是任何你想要使用的WPF控件;2、在WinForm窗体上添加一个ElementHost,然后设置它的Child属性为上一步添加的用户控件就可以了。希望对你有帮助,还有疑问请追问或是Hi ...

windows窗体程序和 wpf有何区别 他们的实际应用范围有何区别
局。虽然Windows Forms没有内建对声明式用户界面定义的支持,但所有类型的.NET程序 通常是利用声明式定制属性和基于XML的配置和资源文件。富创作和定制(Rich composition and customization)——WPF控件具有你从没见过的创作 能力。你可以将一些动画按钮放入一个ComboBox控件中,或者将一些视频剪辑放入一个 ...

相似回答