【问题标题】:How could you enable a WPF application to create user controls on the fly?如何让 WPF 应用程序动态创建用户控件?
【发布时间】:2010-12-06 15:42:57
【问题描述】:
您如何创建一个可以搜索目录、以配对 .xaml / .xaml.cs 文件形式查找用户控件并即时编译/执行这些文件的应用程序?这可能吗?是否有 .exec() 或 .compile() 类可以做到这一点?
基本上我想要做的是让 WPF 应用程序正在运行,并通过让用户填写描述他想要的页面/功能类型的表单,应用程序可以生成 XAML 和代码隐藏文件,然后无需重新编译应用程序即可立即使用。
【问题讨论】:
标签:
c#
wpf
xaml
code-generation
【解决方案1】:
我假设这是为了更改已知应用程序上的 UI 的行为,而不是在另一个应用程序中使用 XAML/CS 组件生成器 - 毕竟已经有应用程序这样做 - Expression Blend 有人吗?
你真的需要重新编译底层的 CS 吗?据我所知,您要做的就是改变应用程序和 UI 的明显行为和外观。这可以通过 xaml 中的命令绑定和组件的样式来实现。
现实情况是,为了执行您需要的功能,您将为用户提供有限的行为选择。您需要确定什么是应用程序以及什么是 UI。
应用程序行为由固定命令控制(它们可以接受参数来改变行为)。
UI 行为(外观、动画等)包含在 xaml.xml 中。如果应用程序在浏览器窗口中运行,您可以根据需要自动生成所需的 xml,并将其链接到底层应用程序。命令并允许浏览器为您执行新行为。
【解决方案2】:
这是个好主意吗?我可以看到一些问题。
- 背后的代码如何“知道”如何与应用程序的其余部分进行交互
- 安全?您将允许某人代表主应用程序进行系统 API 调用
- 应用域???
而是使用 ItemsControls 和 DataTemplates 构建表单。在用户在表单中指定他想要的功能的表单中,无论如何您都会向他展示“构建块”列表。使每个“构建块”成为 ViewModel,并将每个 ViewModel 与 DataTemplate 'UserControl' 相关联。