12

我正在为我的控件使用 XAML 样式。下面的代码用于设置堆栈面板的颜色。它工作正常,但我还有其他事情要做。如果触发器被激活,我想为堆栈面板内的所有子项设置字体颜色。

目前我在堆栈面板中只有文本块,我知道我可以轻松地为文本块创建单独的样式。但是如果触发了这种风格,它只会影响一个而不是所有的文本块。但是,一旦我获得面板的鼠标悬停触发器,我想更改堆栈面板内的所有项目。

这在 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>    
4

2 回答 2

16

将此添加到您的触发器中:

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

于 2009-03-02T13:47:17.253 回答
3

就像 Olle 所说,您可以将附加属性设置TextElement.Foreground为自定义值。对于可视树中的子控件/UI 节点,如果未设置该属性,WPF 将向上遍历 UI 层次结构,直到找到一个值并使用它。这意味着所有子控件都可以共享在父级别定义的属性值。

这应该适用于所有 TextBlocks...但是如果您的 StackPanel 包含一个 TextBox,则其文本颜色不会受到影响。它使用 Control 基类中的 Foreground 属性...因此请务必使用所有可能的子元素类型对其进行测试。

于 2009-03-02T14:14:03.743 回答