Propriedade do conjunto de estilo WPF/XAML para itens infantis?
-
03-07-2019 - |
Pergunta
Estou trabalhando em um estilo XAML para meus controles. O código abaixo é para definir a cor de um Stackpanel. Funciona bem, mas há algo mais que eu quero fazer. Se o gatilho for ativado, eu quiser definir a cor da fonte para todos os itens infantis dentro do Stackpanel.
No momento, só tenho blocos de texto dentro do Stackpanel e sei que poderia criar um estilo separado para um textbock. Mas se esse estilo for acionado, afetará apenas um e nem todos os blocos de texto. Mas quero alterar todos os itens dentro do Stackpanel assim que recebi um gatilho do MouseOver para o painel.
Isso é possível no XAML ou tenho que codificar um evento regular?
<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>
Solução
Adicione isso ao seu gatilho:
<Setter Property="TextElement.Foreground" Value="Blue"></Setter>
Outras dicas
Como Olle disse, você pode definir a propriedade em anexo TextElement.Foreground
para um valor personalizado. Para um nó de controle infantil/UI na árvore visual, se a propriedade não estiver definida, o WPF subirá a hierarquia da UI até encontrar um valor e usá -lo. Isso significa que todos os controles infantis podem compartilhar um valor de propriedade definido no nível dos pais.
Isso deve funcionar para todos os blocos de texto ... no entanto, se o seu Stackpanel contivesse uma caixa de texto, sua cor de texto não seria afetada. Ele usa a propriedade em primeiro plano da classe Base de controle ... Certifique -se de testá -la com todos os tipos possíveis de elementos filhos.