总结起来就是:设计器的版本要跟外部引用的库版本一致,否则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. 缺陷描述(Description)

    [tips1] 缺陷报告的用途在于: 记录bug 对bug进行分类(发现者.日期.版本.模块.严重程度.优先级) 跟踪bug(new-open-fixed-closed) 对bug进行统计分析.总结 ...

  2. SqlServer 数据库同步的两种方式 (发布、订阅),主从数据库之间的同步

    最近在琢磨主从数据库之间的同步,公司正好也需要,在园子里找了一下,看到这篇博文比较详细,比较简单,本人亲自按步骤来过,现在分享给大家. 在这里要提醒大家的是(为了更好的理解,以下是本人自己理解,如有错 ...

  3. torch

    1.从数据直接构建tensor x = torch.tensor([5.5,3]) 2.从已有的tensor构建一个tensor.这些方法会重用原来tensor的特征. x = x.new_ones( ...

  4. 【数值分析】Python实现Lagrange插值

    一直想把这几个插值公式用代码实现一下,今天闲着没事,尝试尝试. 先从最简单的拉格朗日插值开始!关于拉格朗日插值公式的基础知识就不赘述,百度上一搜一大堆. 基本思路是首先从文件读入给出的样本点,根据输入 ...

  5. 关于Django中的数据库操作API之distinct去重的一个误传

    转载自http://www.360doc.com/content/18/0731/18/58287567_774731201.shtml django提供的数据库操作API中的distinct()函数 ...

  6. js页面 :函数名 is not defined

    最初的写法如下 function GetDateStr(AddDayCount) { var dd = new Date(); dd.setDate(dd.getDate() + AddDayCoun ...

  7. pip3的国内安装源

    1,清华源 pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualen 2,豆瓣源 pip3 install -i https ...

  8. 在asp.net core中使用NLog

    第一步:nuget  引入  NLog.Web.AspNetCore 4.5+ 第二步:放入nlog.config <?xml version="1.0" encoding= ...

  9. linux下node.js 查版本号和更新 how to update node

    我用的Mac,不是windows,不太清楚那个怎么搞. Linux下就是终端直接命令 //查版本号 node --version // v6.10.1 我很久没更了 //更新 //先清理Npm的cac ...

  10. oracle的insert的时候&符号如何插入

    chr(38)替换& insert   into   table   values( 'http://localhost:8080/index.action?username=138& ...