UWP アプリをビルドしようとしていますが、現在、リソース ディクショナリで x:Bind を使用して DataTemplate を使用しようとすると、デザイナーの例外が発生します。
それぞれのコード ビハインドを使用してリソース ディクショナリ "ItemTemplates.xaml" を作成しました (x:Bind の初期化を確実にするため)。このファイルには、テンプレートが 1 つだけ含まれています。
<DataTemplate x:Key="HomeViewCategoryListItemTemplate" x:DataType="models:Category">
<Button Background="#88333333" Height="110" VerticalContentAlignment="Top" Padding="10" HorizontalAlignment="Stretch">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<TextBlock FontWeight="Light" HorizontalAlignment="Center" Text="{x:Bind Name}" FontSize="{ThemeResource TextStyleExtraLargeFontSize}" />
<TextBlock Foreground="{ThemeResource ToolTipForegroundThemeBrush}" HorizontalAlignment="Center" Margin="0,10,0,0" Text="{x:Bind Description}" Grid.Row="1" TextAlignment="Center" TextWrapping="Wrap" />
</Grid>
</Button>
</DataTemplate>
次に、このリソース ディクショナリを次のように App.xaml に追加しました。
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="ms-appx:///Resources/Core.xaml" />
<resources:ItemTemplates />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
デザイナーが奇妙な例外をスローするため、プロジェクトは使用できなくなりましたが、プロジェクトをクリーンアップして再構築し、HomeView.xaml ページに移動すると、デザイナーは既定の "ToString()" アイテムのみを表示します (基本的に、リスト ビューには 3 回だけが含まれます)。 ListView のテキスト "Models.Categories") と、ListView のItemTemplateプロパティに下線が引かれ、次のエラーが表示されます。
The resource "HomeViewCategoryListItemTemplate" could not be resolved.
App.xaml に戻ると、(<resources:ItemTemplates />
行の)下線がもう 1 つ表示されます。
The property 'DataType' was not found in type 'DataTemplate'.
実際にアプリを実行すると問題はなく、すべてが完全に機能するため、どちらのエラーも無意味です。これまでに見つけた唯一の回避策は、従来の方法と「コンパイル済み」の方法の両方で ResourceDictionary を 2 回含めることです。
<ResourceDictionary Source="ItemTemplates.xaml" />
<resoures:ItemTemplates />
このソリューションは機能し、設計時と実行時の両方ですべてが機能しますが、非常に面倒で、より安全なアプローチが必要であるか、些細なことを見逃していると本当に思います。
Visual Studio 2015 Update 1 を実行しており、最新の UWP SDK がインストールされています。プロジェクトのターゲットはビルド 10240 です。
編集:デザイナーが非常に頻繁にスローして完全にクラッシュする別の例外:
Unable to cast object of type 'System.String' to type 'Models.Data.Categories.Category'.
StackTrace の出力によると、これは ItemTemplates.xaml.cs コード内、特に生成されたメソッド内で発生しますProcessBindings
。ここでも、プロジェクトは正常にコンパイルおよび実行されますが、デザイナーは出力を表示しようとさえしません。