2009-03-02 68 views
10

我正在爲我的控件使用XAML樣式。 以下代碼用於設置堆疊面板的顏色。它工作正常,但還有其他事情我想要做。如果觸發器被激活,我想爲堆疊面板內的所有子項目設置字體顏色。WPF/XAML樣式集兒童項目的屬性?

此刻,我只有在stackpanel內的文本塊,我知道我可以很容易地爲textbock創建一個單獨的樣式。但是,如果這種風格被觸發,它只會影響一個而不是所有的文本塊。 但是我希望在面板上有一個鼠標懸停觸發後立即更改堆棧面板中的所有項目。

這在XAML中甚至可能嗎?還是必須編寫一個常規事件?

<Style x:Key="XStack" TargetType="StackPanel"> 
    <Setter Property="Background"> 
     <Setter.Value> 
      <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> 
       <GradientStop Color="White" Offset="0"/> 
       <GradientStop Color="SkyBlue" Offset="6"/>      
      </LinearGradientBrush> 
     </Setter.Value> 
    </Setter> 
    <!-- Trigger--> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True" > 
      <Setter Property="Background" Value="SkyBlue"/> 
     </Trigger> 
    </Style.Triggers> 
</Style>  
+0

謝謝!像夢一樣工作! – TalkingCode 2009-03-02 14:44:49

回答

14

添加到您的觸發器:

<Setter Property="TextElement.Foreground" Value="Blue"></Setter>

3

像歐萊說,你可以附加屬性TextElement.Foreground設置爲自定義值。對於可視樹中的子控件/ UI節點,如果該屬性未設置,則WPF將遍歷UI層次結構直到找到值並使用它。 這意味着所有子控件都可以共享在父級別定義的屬性值。

這應該適用於所有TextBlocks ...但是,如果您的StackPanel包含文本框,其文本顏色不會受到影響。它使用Control基類的Foreground屬性...所以一定要用所有可能的子元素類型來測試它。