我在用F#,FsXaml和Elmish.WPF构建的WPF应用程序中遇到此错误。
System.Xaml.XamlObjectWriterException:
Cannot create unknown type '{http://schemas.componentone.com/winfx/2006/xaml}C1ProgressIndicator'.
at System.Xaml.XamlObjectWriter.WriteStartObject(XamlType xamlType)
at FsXaml.InjectXaml.from(String file, Boolean loadFromResource, Object root)
尽管我可以在我的App项目中包含对C1.WPF.4.dll的引用,但我不希望这样。
有更好的方法吗?
答案 0 :(得分:0)
要使其正常工作:
xmlns:c1="http://schemas.componentone.com/winfx/2006/xaml"
之类的字词代替xmlns:c1="clr-namespace:C1.WPF;assembly=C1.WPF.4"
。 这是必需的,因为在运行App.exe时,它可能尚未加载控件库。 an attribute是在控件库中创建从XAML命名空间到CLR命名空间的映射。通过显式说明CLR名称空间和程序集,XamlReader可以找到要实例化的类。
在“视图”代码中创建一个虚拟实例。虚拟实例是控件库中某些内容的实例。这将在控件库的Views.dll中创建依赖项。
// force the compiler to add a reference to C1.WPF.4.dll
let private forceC1DllReference = C1.WPF.Anchor.TopLeft
type MainWindowView = XAML< "MainWindow.xaml" >
第二个感觉就像是黑客。我想知道是否有更好的说法,“即使我没有使用它的类型,也请添加对此DLL的引用。”