WPF:Raising MouseEnter不会更改IsMouseOver属性

时间:2014-09-09 20:40:47

标签: wpf mouseenter ismouseover

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

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上,但不必事先知道它具有什么样式,没有它可能以任何方式受到限制的样式。 / p>

0 个答案:

没有答案