作为ActiveX对象使用时WPF Window的Style不生效如何解决
原因说明
通过COM组件调用启动WPF窗口时,运行环境不会自动初始化WPF的Application实例,定义在Application.xaml中的全局资源字典不会被默认加载,因此按钮引用的RoundButton样式找不到对应资源,就会出现样式丢失的问题。
解决方法
下面是3种可行的解决方式,可根据你的项目情况选择:
- 方法1:手动初始化Application并加载全局资源
在COM类中启动窗口的代码最前面,先添加初始化Application的逻辑:
' COM类的窗口启动方法开头添加 If Application.Current Is Nothing Then ' 初始化WPF应用实例 Dim wpfApp As New Application() ' 加载Application.xaml资源,将占位符替换为你实际的程序集名称 Dim appResources As New ResourceDictionary() appResources.Source = New Uri("pack://application:,,,/你的程序集名称;component/Application.xaml", UriKind.RelativeOrAbsolute) wpfApp.Resources.MergedDictionaries.Add(appResources) End If ' 原有启动窗口的逻辑 Dim targetWindow As New 你的窗口类名() targetWindow.ShowDialog()
- 方法2:将样式迁移到窗口私有资源
如果RoundButton样式只在当前窗口使用,直接把样式代码移动到当前窗口的<Window.Resources>节点下即可,不需要依赖全局Application资源,窗口加载时会自动加载自身资源。 - 方法3:额外检查配置项
如果使用方法1还是无效,检查项目中Application.xaml文件的属性:- 生成操作设置为页面
- 自定义工具设置为
MSBuild:Compile
确保资源可以被正确打包到程序集中。
内容的提问来源于stack exchange,提问作者Fabian
相关产品推荐
相关产品推荐

