2009-06-05 15 views
1

ここはTabItemのXAMLです。トリガーで1つのグラデーションストップの色を設定できるようにしたい。私はトリガーのセッターでグラデーションを完全に再定義できることを知っていますが、私はバックグラウンドで特定のプロパティにアクセスして、将来アニメーション化することができます。WPF ControlTemplateスタイルGradientStop in Trigger

私はトリガーのセッターのすべてのバリエーションを試してみましたが、長い間グーグルグーグルでしたが、まだコンパイルできません。私もclass.property構文を試しましたが、まだ何もありません。このコードが発生する現在のエラーは、

"タイプ 'Background.GradientStops [0]'が見つかりませんでした。

私はここで何が起こっているのか分かりました。おそらく私が望むものは不可能です。しかし、コントロールテンプレートでコントロールのグラデーションをアニメーション化する方法が必要です。

誰か助けてくれますか? おかげ

<Style TargetType="{x:Type TabItem}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type TabItem}"> 
       <TextBlock Padding="6 2 6 2" Name="TheHeader"> 
        <TextBlock.Background> 
         <LinearGradientBrush StartPoint="0, 0" EndPoint="0, 1"> 
          <GradientStop Offset="0" Color="#f4fafd" /> 
          <GradientStop Offset="1" Color="#ceedfa" /> 
         </LinearGradientBrush> 
        </TextBlock.Background> 
        <ContentPresenter ContentSource="Header" Margin="0" /> 
       </TextBlock> 
       <ControlTemplate.Triggers > 
        <Trigger Property="IsSelected" Value="True"> 
         <Setter TargetName="TheHeader" Property="Background.GradientStops[0].Color" Value="White" /> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

答えて

1

あなたは例hereのように、それをアニメーション化することができます。

私はいつもリソースとして複数のブラシを作成し、それらを入れ替えるか、言及したようにブラシを再作成する方が好きですが、わずかなハックを使って設定することもできます。

<Style TargetType="{x:Type TabItem}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TabItem}"> 
        <TextBlock Padding="6 2 6 2" 
           Name="TheHeader" Tag="#f4fafd"> 
            <TextBlock.Background> 
              <LinearGradientBrush StartPoint="0, 0" 
                   EndPoint="0, 1"> 
                <GradientStop Offset="0" 
                    Color="{Binding ElementName=TheHeader, Path=Tag}"/> 
                <GradientStop Offset="1" 
                    Color="#ceedfa" /> 
              </LinearGradientBrush> 
            </TextBlock.Background> 
            <ContentPresenter ContentSource="Header" 
                 Margin="0" /> 
        </TextBlock> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsSelected" 
           Value="True"> 
          <Setter TargetName="TheHeader" 
            Property="Tag" 
            Value="Red" /> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
+1

あなたの権利は、それがハッキーです。しかし、あなたが名前を停止することによってそれをアニメートすることができるなら、なぜあなたはコントロールテンプレートでそれを行うことができませんか? – nlaq

関連する問題