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, но без необходимости заранее знать, какие стили у нее есть, и без стилей, которые она могла бы потенциально каким-либо образом ограничить.

0 ответов

Другие вопросы по тегам