2

以下が機能しない理由を誰かに教えてもらえますか? Value= 構文と後者の明示的な使用法に注目してください。違いがわかりません。

<Style.Triggers>
    <DataTrigger Binding="{Binding ItemType}" Value="{x:Type log:FranchiseAiring}">
        <Setter Property="Template" Value="{StaticResource FranchiseRowStyle}" />
    </DataTrigger>
</Style.Triggers>

上記は例外をスローしますが、以下は正常に動作します。

<Style.Triggers>
<DataTrigger Binding="{Binding ItemType}">
    <DataTrigger.Value>
        <x:Type Type="{x:Type log:FranchiseAiring}" />
    </DataTrigger.Value>
    <Setter Property="Template" Value="{StaticResource FranchiseRowStyle}" />
</DataTrigger>

例外: DataTrigger の Binding と Value の両方を指定する必要があります。マークアップ ファイル ';component/ResourceDictionaries/LogStyles.xaml' 行 14 位置 15 のオブジェクト 'System.Windows.DataTrigger' でエラーが発生しました。

スタック トレース: System.Windows.Markup.XamlParseException.ThrowException (文字列メッセージ、例外 innerException、Int32 lineNumber、Int32 linePosition、Uri baseUri、

4

2 に答える 2

4

これはおそらく Anurag リンク先のバグが原因ですが、使用した 2 つの例は XAML の観点からは正確に同一ではないことに注意してください。

これを要素プロパティ構文に変換すると

Value="{x:Type whatever}"

あなたが得るものは次のとおりです:

<DataTrigger.Value>
  <x:Type TypeName="whatever">
</DataTrigger.Value>

あなたが質問に書いたことは実際に対応しています

Value="{x:Type Type={x:Type whatever}}"

TypeExtension のセマンティクスにより、考えられるすべての状況で両方とも同じ値を生成する必要があります。しかし、他の目的では、それらは異なる可能性があり、WPF のさまざまなバグをくすぐる可能性があります。

このため、Value="{x:Type Type={x:Type log:FranchiseAiring}}"あなたのために働く可能性があります。あなたはそれを試してみて、見つけたいと思うかもしれません。

于 2009-11-09T17:46:39.787 に答える
2

修正済みのバグです。これを確認してください: http://social.msdn.microsoft.com/Forums/en/wpf/thread/3fd23613-6f1d-4ae6-a279-b99d6fdbc374

于 2009-11-09T17:20:40.260 に答える