一部の 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 を開発する手段がないことは、すでに生産性を損なっており、さらに悪化する可能性があります。
他の誰かが同様の問題に遭遇しましたか? また、どのような解決策または回避策がありますか?