You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

作为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 23:48:03