1

几个 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 的方法已经损害了我们的生产力,并且可能会变得更糟。

有没有其他人遇到过类似的问题以及存在哪些解决方案或解决方法?

4

1 回答 1

1

根据我的经验和我的观点,这个问题的解决方案是将 IDE 设置为“在 XAML 视图中打开 XAML 文件”。

换句话说,不要使用设计器。

如果您“需要”使用设计器,请打开 Blend,绘制设计,然后将它们集成到您的应用程序中。您可以单独查看每个视图。您只需要在正在运行的应用程序的上下文中查看合并的布局。我合作过的最高效的 WPF 和 Silverlight 开发人员都使用这种方法。

于 2013-10-02T21:30:57.413 回答