WPF: Повышение MouseEnter не меняет свойство IsMouseOver
Итак, вот настройки. Я звоню
m_CurrentDirectionBtn.RaiseEvent(new MouseEventArgs(Mouse.PrimaryDevice, 0)
{ RoutedEvent = Mouse.MouseEnterEvent});
для кнопки (m_CurrentDirectionBtn), в то время как другой элемент (также кнопка) имеет MouseCapture.
Я бы хотел, чтобы m_CurrentDirectionBtn вел себя так же, как если бы MouseCapture не был включен, а указатель мыши находился над ним. В частности, я хочу, чтобы он вызывал тот же стиль:
<Trigger Property="IsMouseOver" Value="true">
<Setter Property="Effect" Value="{StaticResource MainHoverEffect}" />
</Trigger>
Это не делает этого, и IsMouseOver остается ложным.
Прежде чем предложить использовать
<EventTrigger RoutedEvent="MouseEnter">
вместо
<Trigger Property="IsMouseOver"
Я хочу сказать, что, хотя для некоторых это может быть жизнеспособным обходным путем, для меня это не решение, и поэтому оно не будет ответом на мой вопрос.
Очевидно, что такие вещи, как непосредственная установка свойств m_CurrentDirectionBtn вместо того, чтобы позволить стилю вступить в силу, также не помогут.
То, что я хочу знать, это
1. Почему IsMouseOver не устанавливается? (Я проверил - это не так), как только MouseEnter запущен
а также
2. Как это установить? (это свойство только для чтения).
Чтобы расширить #2, я не хочу устанавливать IsMouseOver с помощью некоторого сбоя, например, через закрытые методы Button через Reflection (я нашел способ сделать это для IsPressed, например, вот так):
typeof(Button).GetMethod("set_IsPressed",
System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
.Invoke(m_CurrentDirectionBtn, new object[] { true });
Это тоже не так. То, что я ищу, - это чистый способ программно произвести тот же эффект, как если бы мышь фактически находилась над m_CurrentDirectionBtn, но без необходимости заранее знать, какие стили у нее есть, и без стилей, которые она могла бы потенциально каким-либо образом ограничить.