Я должен признаться, что сложная работа ControlTemplates - это не то, о чем я уже готов написать книги.: O)
В любом случае, я написал пользовательскую кнопку (там должно быть несколько таких), чтобы соответствовать потребностям HMI (Human Machine Interface) клиента и, конечно, я предоставилControlTemplate для этого.
Кнопка всегда отображает черную тень, но теперь я хочу, чтобы тень меняла цвет, когда кнопка становится «горячей», например, когда мышь над ней (класс кнопки - HmiToolbarButton
-поддерживает d-свойство с именем "IsHot
").
Вот (нерабочий) шаблон:
<Style TargetType="{x:Type local:HmiToolbarButton}">
<Setter Property="AutoSize" Value="False" />
<Setter Property="HotBehaviorNormal" Value="True" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="BorderThickness" Value="0" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:HmiToolbarButton}">
<Grid x:Name="_grd">
<Border
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
>
<ContentPresenter x:Name="PART_CONTENT" />
</Border>
<local:ButtonHotDecorator IsHitTestVisible="False" IsChecked="{TemplateBinding IsChecked}" IsMouseOver="{TemplateBinding IsHot}" IsEnabled="{TemplateBinding HotBehaviorNormal}" />
<Grid.Effect>
<DropShadowEffect ShadowDepth="0" Opacity="0.9" BlurRadius="10" Color="{TemplateBinding DropShadowColor}" />
</Grid.Effect>
</Grid>
<ControlTemplate.Triggers>
<Trigger Property="IsHot" Value="True">
<Setter TargetName="_grd" Property="Effect">
<Setter.Value>
<!-- *** PROBLEM HERE *** -->
<DropShadowEffect
ShadowDepth="0" Opacity="0.9" BlurRadius="10"
Color="{TemplateBinding HotDropShadowColor}"
/>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Черная тень работает нормально, но я не получаю никакого эффекта, когдаЯ перемещаю мышь над кнопкой.Я подозреваю, что TemplateBinding
не работает, потому что, если я изменю его на постоянный цвет, эффект отобразится, как и ожидалось.
Любые подсказки будут оценены.
Спасибо