我应该使用Expression Blend来设计真正动态的UI吗?

时间:2009-11-10 09:10:04

标签: wpf expression-blend

我公司的产品的核心是开发元数据驱动的UI的框架。我不知道如何不那么简洁地描述它,并希望我不需要为了这个问题的目的,但我们会看到。

我一直在努力加快WPF的速度,并且已经在这里和那里构建UI原型,最近我决定看看我是否可以使用Expression Blend来帮助设计这些UI。而且我在这一点上很神秘。

在我看来,Expresssion Blend的设计期望您已经知道在设计时UI中将出现的所有对象。但是我们的程序在运行时动态生成这些对象。

例如,数据行可能会显示在水平StackPanel中,其中包含交替的TextBlocks(用于标题)和TextBoxes(用于数据字段)。这些对象的数量取决于有关数据行中列数的元数据。我很容易编写通过元数据记录运行的代码并动态填充StackPanel,将所有控件绑定到数据或元数据中的属性。 (TextBox的宽度可能绑定到元数据,而其Text绑定到数据。)

但我甚至无法开始弄清楚如何在Expression Blend中做这样的事情。我可以手动创建所有这些控件,这样我就可以使用一组控件来应用样式并计算应用程序的可视化设计,但这样做真的很痛苦。

我想可以编写贯穿我的数据模型的代码,并为所有这些控件发出XAML,然后复制并粘贴它。但是如果事实证明在Expression Blend中有一种方法可以做到这一点,我会感到非常愚蠢而且我已经退缩并且因为我太朦胧而无法找到正确的方法来思考它。

这是否足以让某人尝试制定答案?

1 个答案:

答案 0 :(得分:3)

如果你想设计动态的,数据驱动的用户界面,我认为表达混合是一个非常好的选择。您可以使用Blend来设计DataTemplates,以定义如何将单个数据对象呈现给屏幕。例如,如果您有Person类型的对象,则可以定义控件,如文本框,边框等,然后为列表中的每个人自动生成。 然后,您可以使用这些动态数据项目填充ItemsControls(DataGrid,ListView,TreeView ...),WPF知道如何呈现它们。如果从列表中删除了Persopn,则生成的可视项目也将被删除。这只是一个简单的例子,动态数据的整个概念深入到WPF中,您可以使用混合访问这些功能。

为了能够在表达式混合中设计数据模板,您需要provide sample designtime data

同样有效的是,如果你坚持使用MVVM设计,这将是非常有利的。