總結起來就是:設計器的版本要跟外部引用的庫版本一致,否則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.dll和Interop.APlayer3Lib.dll,
在MainWIndow.xaml中輸入以下代碼
1 <Window x:Class="WPF調用APlayer.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:local="clr-namespace:WPF調用APlayer" 7 mc:Ignorable="d" 8 xmlns:aplayer="clr-namespace:AxAPlayer3Lib;assembly=AxInterop.APlayer3Lib" 9 Title="MainWindow" Height="350" Width="525"> 10 <Grid> 11 <WindowsFormsHost> 12 <aplayer:AxPlayer x:Name="Aplayer"/> 13 </WindowsFormsHost> 14 </Grid> 15 </Window>
運行結果:

需要注意的是SDK中的其它文件也要拷到運行目錄下,那幾個已經注冊的DLL可以忽略,我這里全都拷過去了

APlayer是32位的,所以WPF設計器中選擇AnyCPU可以顯示。
如果選擇X64,就會出現

不過界面還是能夠顯示,這里也說明一個問題,X64的設計器對於X86的程序集雖然不識別,但界面還是能顯示出來(引用的樣式,資源都會不生效),相反就不行了。
最后,附上如何調試XAML設計器中的錯誤
2019.07.27
