Эффект наведения на элемент управления, который находится в случае открытия ContextMenu - PullRequest
4 голосов
/ 06 мая 2011

Я хочу добавить эффект наведения для WPF-Control.

Для этого я создал Style-Trigger, который изменяет Background -Brush элемента управления, если IsMouseOver имеет значение true. Это работает нормально, однако, если я открываю ContextMenu из элемента управления, IsMouseOver становится ложным, и эффект наведения прекращается, пока ContextMenu не закроется.

Я также попробовал комбинацию MouseEnter и MouseLeave, но при этом наблюдается то же самое поведение. Если открыто контекстное меню`, будет запущен MouseLeave.

Я понимаю, почему я не могу сделать это так, но я не вижу хорошего способа решить мои требования. Кто-нибудь уже делал что-то подобное?

1 Ответ

3 голосов
/ 06 мая 2011

Проблема может быть решена путем создания второго триггера, который проверяет, открыто ли присоединенное ContextMenu:

<Trigger Property="IsMouseOver" Value="True">
     <Setter Property="Background" Value="{StaticResource Hover_Brush}"/>                                            
</Trigger>
<DataTrigger Binding="{Binding ContextMenu.IsOpen,RelativeSource={RelativeSource Mode=Self}}" Value="True">
     <Setter Property="Background" Value="{StaticResource Hover_Brush}"/>
</DataTrigger>

Предупреждение
Приведенный выше XAML работает нормальноно имеет одну проблему: если стиль используется для более чем одного элемента и элементы управления ContextMenu являются общими, эффект наведения будет активирован для всех элементов, если контекстное меню открыто для элемента управления.
Следовательно, контекстменю не должно быть общим.Если он определен в ресурсе, используйте свойство x: Shared = "false", чтобы отключить общий доступ.Если это прямо определено в элементе управления, эта проблема не возникает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...