2009-05-07 19 views
8

リストビューで選択した項目に関する詳細情報を表示するために、次のXAMLが使用されています。選択した項目がエラーメッセージを表している場合を除いて、テキストの背後に標準情報の色を表示するようにしたい。以下のコードはそのまま動作せず、常に情報の色が表示されます。ルート<Rectangle />の要素にFillを指定しないとうまくいきます。DataTriggerでバインドされたプロパティをオーバーライドするには

<Rectangle Fill="{DynamicResource {x:Static SystemColors.InfoBrushKey}}" 
      RadiusX="4" RadiusY="4"> 
    <Rectangle.Style> 
    <Style TargetType="{x:Type Rectangle}"> 
     <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=CurrentMessage.Severity" 
        Value="Error" > 
      <Setter Property="Fill" Value="#20FF0000" /> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    </Rectangle.Style> 
</Rectangle> 

スニペットは、それを反映していないが、実際のコードでは、重要度のためにかなりの数の可能なステータスレベルを持っているので、私は、各可能な重症度のトリガを定義する必要はありません。私が欲しいロジックは、「重大度がエラーでない限り情報カラーを使用し、次に赤を使用する」です。

私はWPFのいくつかの基本的な側面を誤解していますが、それを特定することはできません。私が指定したデータトリガが、条件が真であるときに既存のFill値を上書きするように、誰かを正しい方向に向けることができますか?

答えて

10

ほとんどあなたがいます。長方形の属性として「デフォルト」の塗りつぶしを指定するのではなく、スタイル内で指定します。

<Rectangle RadiusX="4" RadiusY="4"> 
    <Rectangle.Style> 
    <Style TargetType="{x:Type Rectangle}"> 
     <Setter Property="Fill" 
       Value="{DynamicResource {x:Static SystemColors.InfoBrushKey}}" /> 
     <Style.Triggers> 
     <DataTrigger Binding="{Binding Path=CurrentMessage.Severity" 
        Value="Error" > 
      <Setter Property="Fill" Value="#20FF0000" /> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    </Rectangle.Style> 
</Rectangle> 
+0

うまくいきました。しかし...なぜ説明できますか? RectangleのFillプロパティは同等であるように思えます。 –

+0

できません。これは経験からのものです。私はそれがオブジェクト自体に設定されていると思うと、スタイル内のものを上書きします。 –

関連する問題