我为我的控件制作了一个XAML样式。 下面的代码用于设置stackpanel的颜色。它工作正常但我还有其他想做的事情。如果激活了触发器,我想为stackpanel内的所有子项设置字体颜色。

目前我只在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>    
有帮助吗?

解决方案

将此添加到您的触发器:

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

其他提示

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

这适用于所有TextBlocks ...但是如果您的StackPanel包含TextBox,则其文本颜色不会受到影响。它使用Control基类的Foreground属性...所以一定要用所有可能的子元素类型测试它。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top