Есть кнопка. На ней сверху лежит StackPanel с картинкой и надписью. Нужно изменить фон этой панели в зависимости от значений свойств IsEnabled и IsMouseOver. Стандартный триггер стиля кнопки позволяет менять только фон кнопки, а надо по срабатыванию триггера менять фон StackPanel. Как из триггера в стиле добраться до StackPanel и изменить ее свойства?
Вот вам простой пример, но, тут используется VisualStateManager
, для смены, цвета, и всего необходимого.
<Style x:Key="BtnFocusVisual">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate>
<Rectangle
Margin="2"
SnapsToDevicePixels="true"
Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"
StrokeDashArray="1 2"
StrokeThickness="1" />
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="DefaultBtn" TargetType="{x:Type Button}">
<Setter Property="OverridesDefaultStyle" Value="True" />
<Setter Property="FocusVisualStyle" Value="{DynamicResource BtnFocusVisual}" />
<Setter Property="Padding" Value="12,11,12,10" />
<Setter Property="MinWidth" Value="100" />
<Setter Property="SnapsToDevicePixels" Value="True" />
<Setter Property="VerticalContentAlignment" Value="Center" />
<Setter Property="HorizontalContentAlignment" Value="Center" />
<Setter Property="RenderOptions.ClearTypeHint" Value="Enabled" />
<Setter Property="RenderOptions.BitmapScalingMode" Value="Fant" />
<Setter Property="FontSize" Value="12" />
<Setter Property="FontFamily" Value="Helvetica Arial sans-serif" />
<Setter Property="FontWeight" Value="Normal" />
<Setter Property="Background" Value="{DynamicResource Static.Background.Brush}" />
<Setter Property="Foreground" Value="{DynamicResource Static.Foreground.Brush}" />
<Setter Property="BorderBrush" Value="{DynamicResource Static.Border.Brush}" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border
x:Name="Border"
Padding="{TemplateBinding Padding}"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness=".9"
CornerRadius="2">
<ContentPresenter
x:Name="PART_Button"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
<VisualStateManager.VisualStateGroups>
<VisualStateGroup Name="Common">
<VisualState Name="Normal" />
<VisualState Name="MouseOver">
<Storyboard>
<ColorAnimation
Storyboard.TargetName="Border"
Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)"
To="{DynamicResource MouseOver.Background.Color}" />
<ColorAnimation
Storyboard.TargetName="Border"
Storyboard.TargetProperty="(Button.BorderBrush).(SolidColorBrush.Color)"
To="{DynamicResource MouseOver.Border.Color}" />
</Storyboard>
</VisualState>
<VisualState Name="Pressed">
<Storyboard>
<ColorAnimation
Storyboard.TargetName="Border"
Storyboard.TargetProperty="(Button.Background).(SolidColorBrush.Color)"
To="{DynamicResource Pressed.Background.Color}" />
<ColorAnimation
Storyboard.TargetName="Border"
Storyboard.TargetProperty="(Button.BorderBrush).(SolidColorBrush.Color)"
To="{DynamicResource Pressed.Border.Color}" />
</Storyboard>
</VisualState>
<VisualStateGroup.Transitions>
<VisualTransition GeneratedDuration="00:00:00.2" To="Normal" />
<VisualTransition GeneratedDuration="00:00:00.2" To="MouseOver">
<VisualTransition.GeneratedEasingFunction>
<ExponentialEase EasingMode="EaseOut" Exponent="10" />
</VisualTransition.GeneratedEasingFunction>
</VisualTransition>
<VisualTransition GeneratedDuration="00:00:00.2" To="Pressed">
<VisualTransition.GeneratedEasingFunction>
<ExponentialEase EasingMode="EaseOut" Exponent="10" />
</VisualTransition.GeneratedEasingFunction>
</VisualTransition>
<VisualTransition GeneratedDuration="00:00:00.2" To="Focused">
<VisualTransition.GeneratedEasingFunction>
<ExponentialEase EasingMode="EaseOut" Exponent="10" />
</VisualTransition.GeneratedEasingFunction>
</VisualTransition>
</VisualStateGroup.Transitions>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Opacity" Value=".6" />
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Cursor" Value="Hand" />
</Trigger>
</Style.Triggers>
</Style>
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Пытаюсь подружить EF6 и SQLite базу данныхСоздал модель и контекст данных
Можно ли получать ответы от пользователя в консоли, когда запускаешь Node сервер? Например, как аналог prompt() из JS, когда тебе предлагают ввести...