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 リソースに配置しても、結果は同じです。私の知る限り、XAML で任意の形式の条件付きコンパイルをサポートする方法はなく、型のコンストラクターはデザイナーによって実行されないため、コード ビハインド ソリューションでさえありそうにありません。

私たちは、約 200 の UI を設計する必要がある大規模なデータ アプリケーションを移植するプロジェクトを開始しており、これらの UI の多くはアプリケーションの奥深くに埋め込まれています。設計データを表示してこれらの UI を開発する手段がないことは、すでに生産性を損なっており、さらに悪化する可能性があります。

他の誰かが同様の問題に遭遇しましたか? また、どのような解決策または回避策がありますか?

4

1 に答える 1