xaml - FsXaml 可以在 F# 解释脚本中使用吗?

标签 xaml f# fsxaml

我刚刚将 FsXaml 演示程序之一转换为解释性 F# 脚本,以便我可以对其进行试验和学习。它不会运行,解释器给了我以下错误消息:

System.NotSupportedException: The invoked member is not supported in a dynamic assembly.
at System.Reflection.Emit.InternalAssemblyBuilder.GetManifestResourceStream(String name)
at FsXaml.InjectXaml.from(String file, Object root)
at FsXaml.App.InitializeComponent() at FsXaml.App..ctor()
at FSI_0002.main[a](a argv) in C:\Users\bobmc\OneDrive\FSharp\Learning\WPFExamples\FsXaml\demos\WpfSimpleMvvmApplication\WPFApp.fsx:line 104
at .$FSI_0002.main@() in C:\Users\bobmc\OneDrive\FSharp\Learning\WPFExamples\FsXaml\demos\WpfSimpleMvvmApplication\WPFApp.fsx:line 109



我可以将 F# 解释器与 FsXaml 一起使用吗?感谢大家的帮助。

最佳答案

不幸的是,WPF 和脚本不能很好地协同工作。

异常发生在 WPF 运行时本身 - FsXaml.InjectXaml正在使用 XamlObjectWriter使用 XAML 文件中的内容填充类型。如果您使用的是动态程序集(如 FSI),则此类型不起作用,不幸的是,这意味着 FsXaml 可能永远无法从 FSI 工作。

话虽如此,即使有办法解决这个问题,它的用途也非常有限。 WPF 还具有一些限制,使其不能很好地与脚本方案配合使用,例如“在给定的 AppDomain 中只能创建一个应用程序”限制。那个使关闭“主”(第一个)窗口使您永远无法打开另一个窗口。因此,我没有优先尝试在 FSI 中进行这项工作。

如果有人对如何让 FsXaml 在 FSI 的上下文中更好地发挥作用有想法,我很乐意接受贡献,但在这一点上,我没有看到适合该使用场景的好的解决方案。

编辑: FsXaml 3.1.6 现在包含的功能使这更容易。如果您不关闭主窗口或使用对话框,它运行良好。有一个演示应用程序/脚本说明了这一点。

关于xaml - FsXaml 可以在 F# 解释脚本中使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41946555/

相关文章:

wpf - xaml 中的常量

c# - 为什么要使用多绑定(bind)转换器?

f# - 为什么F#列表没有尾部指针

dictionary - 如何从 FSharp 中的反射调用 Map.Add?

wpf - 无法加载 FsXaml.Wpf.TypeProvider

f# - F# 函数名称和指向该名称的函数值之间的区别

wpf - 位图图像异常

xaml - 两种纵横比的两种布局 (4 :3 and 16:9) - changing automatically

f# - 如何重写多级匹配表达式