Есть у меня такой элемент UserControl с определённым содержимым. У меня он добавляется в стековую панель (StackPanel). Вот мне нужно, чтобы при наведении курсора поменялись свойства элементов внутри UserControl на уровне WPX/XAML. Можно, конечно, это проделать на C#. Но хотелось бы проделать сразу на уровне XAML в словаре ресурсов.
P.S. Мне удалось это сделать.
<!--Element, TextBlock, ListDevices-->
<Style TargetType="{x:Type TextBlock}" x:Key="ElementText">
<Setter Property="FontSize" Value="14"/>
<Setter Property="FontFamily" Value="Segoe UI"/>
<Setter Property="FontWeight" Value="Medium"/>
<Setter Property="Padding" Value="6"/>
<Setter Property="TextAlignment" Value="Center"/>
</Style>
<!--Element, Border, ListDevices-->
<Style TargetType="{x:Type Border}" x:Key="ElementBorder">
<Setter Property="Background" Value="{Binding Background, Mode=OneWay, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type UserControl}}}"/>
<Setter Property="Opacity" Value="0.25"/>
<Setter Property="local:Status.IsValue" Value="{Binding IsValue}"/>
<!--<Style.Triggers>
--><!--<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Opacity" Value="0.75"/>
</Trigger>--><!--
</Style.Triggers>-->
</Style>
<!--Element, ListDevices-->
<Style TargetType="{x:Type UserControl}" x:Key="Element">
<Setter Property="Background" Value="{Binding Background, Mode=OneWay, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Border}}}"/>
<Setter Property="Foreground" Value="{Binding Foreground, Mode=OneWay, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Border}}}"/>
<Setter Property="Opacity" Value="0.75"/>
<Setter Property="local:Status.IsStatus" Value="{Binding IsStatus}"/>
<Setter Property="local:Status.IsValue" Value="{Binding IsValue}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type UserControl}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="8"/>
<ColumnDefinition Width="13*"/>
<ColumnDefinition Width="5*"/>
<ColumnDefinition Width="40"/>
</Grid.ColumnDefinitions>
<Border Grid.Column="0" x:Name="Bullet" Style="{StaticResource ElementBorder}"/>
<Border Grid.Column="1" x:Name="ElementSpace" Grid.ColumnSpan="4" Style="{StaticResource ElementBorder}"/>
<TextBlock Grid.Column="1" TextAlignment="Left" Text="Проверка" x:Name="NameDevice" Style="{StaticResource ElementText}"/>
<ComboBox Grid.Column="2" SelectedIndex="0" Padding="6">
<ComboBoxItem Content="C1"/>
<ComboBoxItem Content="C2/M"/>
</ComboBox>
<TextBlock Grid.Column="3" Text="❗🔔" Style="{StaticResource ElementText}"/>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="local:Status.IsValue" Value="true">
<Setter TargetName="Bullet" Property="Opacity" Value="0.95"/>
<Setter TargetName="ElementSpace" Property="Opacity" Value="0.45"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="true">
<Setter TargetName="Bullet" Property="Opacity" Value="0.95"/>
<Setter TargetName="ElementSpace" Property="Opacity" Value="0.45"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="local:Status.IsStatus" Value="0">
<Setter Property="Background" Value="#FFDBD7D2"/>
<Setter Property="Foreground" Value="#FFDBD7D2"/>
</Trigger>
<Trigger Property="local:Status.IsStatus" Value="1">
<Setter Property="Background" Value="#FF50C878"/>
<Setter Property="Foreground" Value="#FF50C878"/>
</Trigger>
<Trigger Property="local:Status.IsStatus" Value="2">
<Setter Property="Background" Value="#FFFFD700"/>
<Setter Property="Foreground" Value="#FFFFD700"/>
</Trigger>
<Trigger Property="local:Status.IsStatus" Value="3">
<Setter Property="Background" Value="#FFFF2400"/>
<Setter Property="Foreground" Value="#FFFF2400"/>
</Trigger>
<Trigger Property="local:Status.IsStatus" Value="4">
<Setter Property="Background" Value="#FF7FC7FF"/>
<Setter Property="Foreground" Value="#FF7FC7FF"/>
</Trigger>
<!--<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Background" Value="#FF7FC7FF"/>
<Setter Property="Foreground" Value="#FF7FC7FF"/>
</Trigger>-->
</Style.Triggers>
</Style>
Осталось только решить небольшую проблему. Как забиндить значение local:Status.IsValue из UserControl в ControlTemplate? А то у меня выбрасывает ошибку на код:
<Trigger Property="local:Status.IsValue" Value="true">
<Setter TargetName="Bullet" Property="Opacity" Value="0.95"/>
<Setter TargetName="ElementSpace" Property="Opacity" Value="0.45"/>
</Trigger>