Подтвердить что ты не робот

WPF/XAML Style set Свойство для дочерних элементов?

Я работаю над стилем XAML для своих элементов управления. Ниже приведен код для установки цвета панели стека. Он отлично работает, но есть что-то еще, что я хочу сделать. Если триггер активирован, я хочу установить цвет шрифта для всех дочерних элементов внутри панели стека.

В настоящий момент у меня есть только текстовые блоки внутри панели стека, и я знаю, что могу легко создать отдельный стиль для текстового редактора. Но если этот стиль срабатывает, он будет влиять только на ONE, а не на ВСЕ текстовые блоки. Но я хочу изменить все элементы внутри панели стека, как только я получил триггер для мыши для панели.

Возможно ли это в 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>    
4b9b3361

Ответ 1

Добавьте это к вашему триггеру:

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

Ответ 2

Как сказал Олль, вы можете установить прикрепленное свойство TextElement.Foreground на пользовательское значение. Для дочернего элемента управления /UI node в визуальном дереве, если свойство не установлено, WPF будет поднимать иерархию пользовательского интерфейса, пока не найдет значение и не использует его. Это означает, что все дочерние элементы управления могут совместно использовать значение свойства, определенное на родительском уровне.

Это должно работать для всех текстовых блоков... однако, если ваш StackPanel содержит TextBox, его цвет текста не будет затронут. Он использует свойство Foreground из базового класса Control... Поэтому обязательно проверьте его со всеми возможными типами дочерних элементов.