几个 Wpf 控件没有可视化表示,除非它们有一些数据(例如 ItemsControl)。因此,要在 Visual Studio 设计器中查看它们的布局,您需要使用 DesignData XAML 扩展来使用可以呈现的内容填充它们。这些控件的一个常见用法是定义几个隐式类型的数据模板,以便控件可以显示各种类型。
然而,在我看来,设计师对这种最简单的布局几乎没有任何支持,这对我们来说几乎毫无用处,但我希望我错了,我只是忽略了一些东西。这在我看来是这样的(为简洁起见,省略了 xmlns 命名空间)。
<UserControl
d:DataContext="{d:DesignData Source=/CustomersDesignData.xaml}">
<Grid>
<ItemsControl>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ListBoxItem>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FirstName}"/>
<TextBlock></TextBlock>
<TextBlock Text="{Binding LastName}"/>
</StackPanel>
</ListBoxItem>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</UserControl>
上述工作是设计人员正确显示样本数据,从而能够验证布局。但是没有隐式的数据类型使得这种方法对于显示多种类型毫无用处。
<UserControl
d:DataContext="{d:DesignData Source=/CustomersDesignData.xaml}">
<Grid>
<ItemsControl>
<ItemsControl.Resources>
<DataTemplate DataType="{x:Type local:Customer}">
<ListBoxItem>
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding FirstName}"/>
<TextBlock></TextBlock>
<TextBlock Text="{Binding LastName}"/>
</StackPanel>
</ListBoxItem>
</DataTemplate>
</ItemsControl.Resources>
</ItemsControl>
</Grid>
</UserControl>
以上在运行时工作正常,并且可以添加额外的隐式数据类型模板,使控件能够显示多种类型。美中不足的是,设计者笨拙地显示原始 ToString() 输出,使得这种方法对于开发 UI 毫无用处。
此外,无论您在哪里定义模板,将其放在 UserControl 或 App 资源中,结果似乎都没有区别,nada。据我所知,没有办法在 XAML 中支持任何形式的条件编译,并且类型的构造函数不是由设计器运行的,因此即使是解决方案背后的代码似乎也不太可能。
我们正处于移植一个相当大的数据应用程序的项目的开始,这将需要我们设计大约 200 个 UI,其中许多 UI 都深埋在应用程序中。缺乏任何能够开发这些显示设计数据的 UI 的方法已经损害了我们的生产力,并且可能会变得更糟。
有没有其他人遇到过类似的问题以及存在哪些解决方案或解决方法?