5

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。ここでも、プロジェクトは正常にコンパイルおよび実行されますが、デザイナーは出力を表示しようとさえしません。

4

1 に答える 1

0

この現在のバージョンでは、x:Bind よりも Binding を優先します

マイクロソフトのエンジニアからの回答

あなたと同じ問題に加えて、設計時に x:Bind を使用するときに大量のバグがあります。修正する最も簡単な方法: 古いものとして Binding を使用します。そしてリリース時、性能を考慮している場合はBindingをx:Bindに変更

于 2016-05-05T10:45:57.937 に答える