1

所以这里是设置。我打电话

m_CurrentDirectionBtn.RaiseEvent(new MouseEventArgs(Mouse.PrimaryDevice, 0) 
    { RoutedEvent = Mouse.MouseEnterEvent});

在 Button (m_CurrentDirectionBtn) 上,而另一个元素(也是 Button)具有 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,比如通过反射通过按钮的私有方法(例如,我找到了一种方法来为 IsPressed 做到这一点):

typeof(Button).GetMethod("set_IsPressed", 
    System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.NonPublic)
    .Invoke(m_CurrentDirectionBtn, new object[] { true });

那也不是。我正在寻找的是一种干净的方式来以编程方式产生与鼠标实际上在 m_CurrentDirectionBtn 上相同的效果,但不必事先知道它有什么样式,也没有可能以任何方式限制它的样式。

4

0 回答 0