WPF/XAML样式设置子项属性?

12

我正在为我的控件创建一个XAML样式。

下面的代码是用于设置stackpanel颜色的,它有效地工作,但是我还想做一些别的事情。如果触发器被激活,我想为堆栈面板内所有子项设置字体颜色。

目前我只有文本块(textblock)在stackpanel内部,我知道我可以轻松创建一个单独的文本块样式。但是如果此样式被触发,它只会影响一个而不是所有文本块(textblocks)。 但是我希望在面板(mouseover trigger)上进行触发时立即更改堆栈面板内的所有项。

这在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>    
2个回答

16
将以下内容添加到您的触发器中:

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


3

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

这对于所有TextBlock都应该有效...但是,如果您的StackPanel包含TextBox,则其文本颜色不会受到影响。它使用Control基类的Foreground属性...因此,请确保测试所有可能的子元素类型。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接