总结起来就是:设计器的版本要跟外部引用的库版本一致,否则XAML设计器就会显示不出来。

例如你的程序是X64的,但是引用的COM组件是32位的,就会显示不出来。这里的建议是:编译一个32位的COM中间件,供界面显示,实际调用还是那个64位的库。

在WPF中,当使用了绑定,引用预定义的资源,以及转换,验证等功能时,如果版本不对应,就会看到以下界面(说明:WPF程序生成版本是X64,程序中定义的资源,转换器等也属于64位,如果设计器选择的是AnyCpu或X86,那界面就会显示不出来。

如果设计器和程序版本不对应,不管怎么编译,也还是不会显示,

以前遇到这个问题的时候,找了很多办法都没有解决,包括网上说的改成Release再改成Debug。最后只能注释掉Converter和COM组件引用的部分。

现在终于搞清楚了,是这个原因。

把程序版本改成X64,设计器也改成X64

这个时候我们再编译一下,XAML设计器就可以正确显示了

同理,设计器和程序版本都改成X86也是可以正常显示的。注意对应就行了。

==================================================================================================================================
下面以迅雷看看播放器引擎APlayer来演示一下,

APlayer是一个COM组件,网址是:http://aplayer.open.xunlei.com/

下载APlayerSDK.zip,解压,运行install.bat来注册COM组件

新建一个Winform工程

在工具箱中选择“选择项”

再选择COM组件,钩上APlayer

在工具箱中将APlayer拖到界面上,再生成项目,找到生成目录下的AxInterop.APlayer3Lib.dll和Interop.APlayer3Lib.dll

再新建一个WPF应用程序

添加引用,先选择WindowsFormIntegration,System.Windows.Forms这两个程序集

再选择前面生成的AxInterop.APlayer3Lib.dllInterop.APlayer3Lib.dll

在MainWIndow.xaml中输入以下代码

 <Window x:Class="WPF调用APlayer.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WPF调用APlayer"
mc:Ignorable="d"
xmlns:aplayer="clr-namespace:AxAPlayer3Lib;assembly=AxInterop.APlayer3Lib"
Title="MainWindow" Height="" Width="">
<Grid>
<WindowsFormsHost>
<aplayer:AxPlayer x:Name="Aplayer"/>
</WindowsFormsHost>
</Grid>
</Window>

运行结果:

需要注意的是SDK中的其它文件也要拷到运行目录下,那几个已经注册的DLL可以忽略,我这里全都拷过去了

APlayer是32位的,所以WPF设计器中选择AnyCPU可以显示。

如果选择X64,就会出现

 不过界面还是能够显示,这里也说明一个问题,X64的设计器对于X86的程序集虽然不识别,但界面还是能显示出来(引用的样式,资源都会不生效),相反就不行了。

示例代码

最后,附上如何调试XAML设计器中的错误

https://docs.microsoft.com/zh-cn/visualstudio/designers/debugging-or-disabling-project-code-in-xaml-designer?view=vs-2017

2019.07.27

解决COM组件在WPF设计器中命名空间不存在XXX的问题(附带如何在WPF中使用APlayer引擎)的更多相关文章

  1. 让VS2019支持.NET Core WinForms和WPF设计器的临时办法(比微软给出的办法更方便)

    参考以下代码片段,给项目添加NET Framework目标框架,切换到NET472运行时重新生成项目,然后打开设计器界面. 如果遇到设计器报错,尝试以NET472运行时为目标重新生成项目,并重新打开V ...

  2. 让VS2019支持.NET Core WinForms和WPF设计器的临时办法(转)

    .net core 3.0 Preview 6,vs2019 16.1.4 暂时还不支持Winform designer 解决方案: 将Form1修改为其他名字 WinForm   编辑项目文件  加 ...

  3. 解决Visual Studio 2013 XAML设计器异常

    今天使用Visual Studio 2013打开一个windows 应用商店程序的时候,发现出现如下异常:    at System.Windows.Input.Cursor.LoadFromFile ...

  4. 通过用 .NET 生成自定义窗体设计器来定制应用程序

    通过用 .NET 生成自定义窗体设计器来定制应用程序 https://www.microsoft.com/china/MSDN/library/netFramework/netframework/Cu ...

  5. [翻译]用于.NET Core的Windows窗体设计器发布

    本文由微信公众号<开发者精选资讯>翻译首发,转载请注明来源 今天我们很高兴地宣布,.NET Core项目的Windows窗体设计器现在可以在 Visual Studio 2019 16.6 ...

  6. .NET创建宿主设计器--DesignHost、DesignSurface.

    一个窗口在运行时,是这样的: 但是,在设计时,却远比这复杂的多,它需要一个设计器对象:它仅存在于设计时,并连接到运行时存在的对象.   宿主容器 我们可以看到每个窗体和按钮均有与之相关的设计器.这两个 ...

  7. Windows 窗体设计器(Windows Forms Designer)入门

      Visual Studio 2010 更新:2010 年 9 月 Windows 窗体设计器提供多个用于生成 Windows 窗体应用程序的工具. 本演练阐释如何使用设计器提供的各种工具生成应用程 ...

  8. WinForms项目升级.Net Core 3.0之后,没有WinForm设计器?

    目录 .NET Conf 2019 Window Forms 设计器 .NET Conf 2019 2019 9.23-9.25召开了 .NET Conf 2019 大会,大会宣布了 .Net Cor ...

  9. 可视化流程设计——流程设计器演示(基于Silverlight)

    上一篇文章<通用流程设计>对鄙人写的通用流程做了一定的介绍,并奉上了相关源码.但一个好的流程设计必少不了流程设计器的支持,本文将针对<通用流程设计>中的流程的设计器做一个简单的 ...

随机推荐

  1. js如何将汉字转化为拼音

    github地址,上面有封装好的转换工具:https://github.com/sxei/pinyinjs 里面有几个库,根据功能,库的文件大小也不一样,可以根据需求去引入使用. 里面封装好了方法: ...

  2. 第12组 Beta冲刺(2/5)

    Header 队名:To Be Done 组长博客 作业博客 团队项目进行情况 燃尽图(组内共享) 由于这两天在修严重Bug,故项目没有新的进展,燃尽图没有变化 展示Git当日代码/文档签入记录(组内 ...

  3. mysql count() 函数,对结果统计计数

    mysql> ; +----------+------------+-----+---------------------+ | name_new | transactor | pid | or ...

  4. 移动端点击事件兼容问题,在pc端可以点,在手机上不可以点

    ms-click="showCodeExplain()" onClick="javascript:;" 在点击事件后面加上onClick="javas ...

  5. SQLSERVER教师学生成绩课程四表联合各种SQL考题

    --CREATE DATABASE EXAM_1 --GO USE EXAM_1 --判断并删除表 IF OBJECT_ID('Scores') IS NOT NULL DROP TABLE Scor ...

  6. 自定义Spring Boot内置tomcat的404页面

    spring boot 的相关404页面配置都是针对项目路径下的(如果配置了 context-path) 在context-path不为空的情况下,如果访问路径不带context-path,这时候会显 ...

  7. PostgreSQL--with子句

    在PostgreSQL中,WITH查询提供了一种编写辅助语句的方法,以便在更大的查询中使用.它有助于将复杂的大型查询分解为更简单的表单,便于阅读.这些语句通常称为公共表表达式(Common Table ...

  8. Xamarin图表开发基础教程(4)OxyPlot框架

    Xamarin图表开发基础教程(4)OxyPlot框架 XamaminAndroid中绘制线图OxyPlotAndroidDemo [示例1-1:OxyPlotAndroidDemo]下面实现线图的绘 ...

  9. 调用k8s api遇到CERTIFICATE_VERIFY_FAILED的问题解决方法

    前言 python3.5.6版本,django1.1.12版本 最近要调用k8s接口,k8s接口的使用方法请参考官网的说明:戳我 调用k8s接口时,遇到 CERTIFICATE_VERIFY_FAIL ...

  10. [LeetCode] 257. Binary Tree Paths 二叉树路径

    Given a binary tree, return all root-to-leaf paths. For example, given the following binary tree: 1 ...