Wpf 绑定到按钮触发器中的Datacontext属性?

Wpf 绑定到按钮触发器中的Datacontext属性?,wpf,triggers,datacontext,Wpf,Triggers,Datacontext,我理解我的问题,但我正在寻求解决方案的建议: <Button.Style> <Style TargetType="{x:Type Button}" BasedOn="{StaticResource ButtonStyle}"> <Style.Triggers> <Trigger Property="IsMouseOver" Value="Tru

我理解我的问题,但我正在寻求解决方案的建议:

        <Button.Style>
            <Style TargetType="{x:Type Button}" BasedOn="{StaticResource ButtonStyle}">
                <Style.Triggers>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter Property="MouseOverControl" Value="True" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Button.Style>
此外,我还将此按钮添加到我的按钮中,以尝试链接它们,它似乎可以工作:

ex:MouseBehaviour.MouseOver="{Binding MouseOverControl}"
但是什么也没有发生,这是因为我认为它目前的工作方式是错误的,所以它希望我的DC属性发生变化,但我希望我的DC中的MouseOver控件反映我按钮的IsMouseOver属性的值。这是否简单到:

SetMouseOver(element, element.IsMouseOver);

或者类似的东西?

首先想到的是将
IsMouseOver
属性直接绑定到viewmodel中的
MouseOverControl
属性,而无需触发。不幸的是,这种情况

解决该限制的一个可能的解决方法是使用每当
IsMouseOver
属性更改时引发的事件来触发viewmodel中的方法/命令。我们可以使用。由于
ismousehosschanged
事件不存在,我们可以使用两个事件(
MouseEnter
MouseLeave
)作为替代

<Button>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="MouseEnter">
            <ei:CallMethodAction MethodName="MouseEnter" TargetObject="{Binding}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="MouseLeave">
            <ei:CallMethodAction MethodName="MouseLeave" TargetObject="{Binding}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</Button>

另一种可能的方法是为
MouseOver
创建附加行为,以便您可以将其绑定到viewmodel的属性,如图所示。

因此,我最终通过添加自己的操作来更新属性来解决此问题,因为CallMethodAction仅在Blend 4中可用,当时我无法使用它

这个问题对我帮助很大:

特别是,我想在该页()上向您介绍用户Neutrino的答案,我需要更改的唯一部分是XAML实现:

        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseEnter">
                <ex:SetPropertyAction PropertyName="MouseOverControl" TargetObject="{Binding}"
                                   PropertyValue="true" />
            </i:EventTrigger>
            <i:EventTrigger EventName="MouseLeave">
                <ex:SetPropertyAction PropertyName="MouseOverControl" TargetObject="{Binding}"
                                   PropertyValue="false"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>


快速的解释是,每当鼠标进入我添加了这些触发器的按钮时,它就会在我的viewmodel/datacontext中设置一个属性来反映这一点,完美!感谢har07提供了几种在不同情况下也能工作的替代解决方案(如果我能找出附加的行为!!)

谢谢,我选择了行为路线,因为我的应用程序是.NET 3.5,由于某种原因我没有安装blend 3 SDK(我有4和4.5)/我不知道它是否能工作。无论如何,请看我更新的问题,我基于您发送给我的链接,但我很难想象属性和绑定发生了什么。是的,我似乎也无法让CallMethodAction正常工作,因为它在Blend 3和Blend 4中不存在,需要我将所有内容都更改为.NET 4.0。。
public void MouseEnter()
{
    MouseOverControl = true;
}

public void MouseLeave()
{
    MouseOverControl = false;
}
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseEnter">
                <ex:SetPropertyAction PropertyName="MouseOverControl" TargetObject="{Binding}"
                                   PropertyValue="true" />
            </i:EventTrigger>
            <i:EventTrigger EventName="MouseLeave">
                <ex:SetPropertyAction PropertyName="MouseOverControl" TargetObject="{Binding}"
                                   PropertyValue="false"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>