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

StackOverflow https://stackoverflow.com/questions/602305

  •  03-07-2019
  •  | 
  •  

Вопрос

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

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

Возможно ли это вообще в 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>

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top