2012-04-13 51 views
0

我有一個XAML UserControl,它使用包含在同一個項目中的轉換器。XamlParseException當從不同的程序集引用轉換器

xmlns:filter="clr-namespace:SampleModuleFilter" - namespace definition 

到目前爲止好。但是,當我將轉換器移動到另一個程序集並相應地調整名稱空間和引用時,出現以下異常: XamlParseException - 「在'System.Windows.Markup.StaticResourceHolder'上提供值時拋出異常。方法或操作未實現「,這是隻是奇怪 移動到另一個庫後的命名空間看起來是這樣的:。

xmlns:filter="clr-namespace:SampleLibrary.Converters;assembly=SampleLibrary" 

轉換器資源定義是:

<filter:BoolToVisibilityConverter x:Key="boolToVisibilityConverter" /> 

我用它像這樣:

Visibility="{Binding DisplayLabel, Converter={StaticResource ResourceKey=boolToVisibilityConverter}}" 

智能感知很明顯可以看到庫,因爲它工作正常(在我編寫命名空間前綴後提供轉換器類)。

任何想法可能是什麼問題?

+0

生成操作是否正確?我注意到當在程序集之間移動任何WPF相關文件時,構建操作會發生變化。 – 2012-04-13 14:20:22

+0

是轉換器公開課嗎? – Jaster 2012-04-13 14:23:42

+0

是的,生成操作仍然是編譯,轉換器是公共類 – 2012-04-13 14:27:36

回答

0

這很奇怪;我們有我們的轉換器都位於中央圖書館,它工作正常。假設引用和命名空間是正確的,我可以建議的唯一的事情就是清理和重建這兩個有問題的項目。

0

「SampleLibrary.dll」在代碼中的某處使用嗎?

我得到了一個奇怪的錯誤,其中僅在xaml文件中使用的引用程序集在編譯時被跳過,並且不會出現在dll依賴項中。

+0

感謝您的建議,我試了一下,很不幸沒有幫助 – 2012-04-13 14:15:26

1

您還必須在代碼隱藏文件中引用您的程序集。

如果僅在XAML部件中引用程序集,則編譯器會返回「加載xxx.dll失敗」異常。

你必須也作出對連接體的直接調用使得這樣的事情:

var dummy = new MyExternalAssemby.MyType(); 

或者即將在代碼

new MyExternalAssemby.MyType(); 

新行沒有把結果在虛擬變量。

通常我在靜態構造函數中這樣做。 我認爲這是XAML解釋器中的一個錯誤,因爲XAML沒有被編譯,而是在BAML(二進制XAML)中被「翻譯」。因此,如果您在XAML中引用類型而不在.NET鏈接器後面的代碼中創建「硬」引用,則完全忽略它。

HTH 洛倫佐

1

而不只是:

xmlns:filter="clr-namespace:SampleModuleFilter" 

參考大會也

xmlns:filter="clr-namespace:SampleModuleFilter;assembly=SampleModuleFilterAssemblyName" 

這應該做的伎倆。

相關問題