簡體   English   中英

我們如何在WPF中將Frame.Content轉換為Page類型

[英]How can we cast Frame.Content to a Page type in WPF

基本上; 我需要從加載WPF頁面的WPF框架中調用WPF頁面上的方法。 我使用Frame.Content屬性獲取加載的頁面,並將其強制轉換為頁面類型,因為Content屬性返回Object類型。 該項目成功構建,但是它在運行時引發InvalidCastException。

//This line throws InvalidCastException at runtime...
((PageA)TargetFrame.Content).methodA();

這是異常詳細信息:


[A]LoongNamespaceA.PageA cannot be cast to [B]LoongNamespaceA.PageA.
Type A originates from 'AssemblyA, Version=1.0.0.58, Culture=neutral, PublicKeyToken=null' in the context 'LoadFrom' at location 'C:\Users\abdullah.battal\AppData\Local\AssemblyA.dll'.
Type B originates from 'AssemblyA, Version=1.0.0.58, Culture=neutral, PublicKeyToken=null' in the context 'Default' at location 'C:\loongPathToSourceProject\bin\AssemblyA.dll'.

注意上下文和位置的差異...

我們該如何解決呢?

您正在進行方法調用的類期望程序集被加載到默認的Context中,位於“ C:\\ loongPathToSourceProject \\ bin \\ AssemblyA.dll”。 正在顯示的實際類型已從“ C:\\ Users \\ abdullah.battal \\ AppData \\ Local \\ AssemblyA.dll”加載到LoadFrom上下文中。

由於這些類型來自磁盤上的不同程序集,因此類型系統將它們識別為不同類型,並且無法將其強制轉換為您要強制轉換的類型(即使它們具有相同的簽名,.NET也無法識別它們)因為它們來自不同的上下文)。

MSDN上的這篇文章描述了使用LoadFrom程序集有一些缺點,即:

如果程序集使用LoadFrom加載,並且探測路徑包括具有相同標識但位置不同的程序集,則可能發生InvalidCastException,MissingMethodException或其他意外行為。

您可能需要重新設計如何動態加載程序集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM