2009-06-05 67 views
1

這是我的一個TabItem的XAML。我希望能夠在觸發器中設置單個漸變停止的顏色。我知道我可以在觸發器的setter中完全重新定義漸變,但我想訪問背景上的特定屬性,以便將來可以對它進行動畫處理。WPF ControlTemplate樣式GradientStop in Trigger

我已經嘗試了觸發器的setter中的所有變化,並且搜索了很長時間 - 但我仍然無法編譯它。我也嘗試了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

你的權利,那就是hacky。但是,如果您可以通過分配停止名稱來爲其設置動畫,爲什麼不能在控制模板中執行此操作? – nlaq 2009-06-05 06:42:14

相關問題