У меня есть пользовательский cotrol, который состоит из холста, содержащего эллипс и окно просмотра. Эллипс является фоном, а окно просмотра заполняется во время выполнения графикой, загруженной из другой сборки. У меня проблемы с созданием «горячего» поведения для моего элемента управления, так что эллипс меняет цвет, когда на нем находится мышь.
Если я положу триггер на эллипс, тогда цвет изменится, но он снова изменится, когда мышь будет перемещаться над графикой в окне просмотра, потому что окно просмотра не является дочерним элементом эллипса.
Из того, что я прочитал, должно быть возможно установить свойства дочерних элементов из триггера родительского элемента. Однако я не могу заставить это работать. Мой код выглядит так:
<Viewbox Margin="5" >
<Viewbox.Resources>
<SolidColorBrush x:Key="HotColor" Color="Blue"/>
<SolidColorBrush x:Key="ColdColor" Color="Red"/>
<Style TargetType="Canvas" x:Key="BackgroundStyle">
<Setter Property="Ellipse.Fill" Value="{StaticResource ColdColor}"/>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Ellipse.Fill" Value="{StaticResource HotColor}"/>
</Trigger>
</Style.Triggers>
</Style>
</Viewbox.Resources>
<Canvas Width="44.000" Height="44.000" Style="{StaticResource BackgroundStyle}">
<Ellipse Width="44" Height="44"/>
<Viewbox Name="ButtonGraphics"/>
</Canvas>
</Viewbox>
В результате я вообще не получаю цвета на своем эллипсе. Достаточно забавно, если я попытаюсь установить Ellipse.Opacity вместо него, он работает, но влияет как на эллипс, так и на графику! Значит, похоже, что он применяется к холсту, а не к эллипсу?