1

我目前正在使用这篇博文中的代码,以便让我的 TreeView 突出显示当前被鼠标悬停的那些项目。这按预期工作,但是现在我希望 TreeViewItems 在悬停/未悬停时通知其附加的 ViewModel。

但是,我不知道如何实现这一目标。对应的 XAML 代码如下所示:

<Style TargetType="{x:Type TreeViewItem}">
    <Style.Triggers>
        <Trigger Property="Controls:TreeViewHelper.IsMouseDirectlyOverItem" Value="True">
            <Setter Property="Background" Value="Green" />
        </Trigger>
    </Stile.Triggers>
</Style>

如何将我的 ViewModel 中名为 TreeNodeModel.IsHovered 的属性绑定到 TreeViewItem(或者可能是附加的依赖属性 IsMouseDirectlyOverItem),以便我可以在我的代码中对这些更改做出反应?

我通过谷歌找到的所有示例仅说明了如何设置背景颜色。提前感谢您在可能微不足道的答案上的时间。

4

1 回答 1

1

在您的Style中,尝试添加Setter绑定IsMouseDirectlyOverItem到 的IsHovered,并使用OneWayToSource绑定模式以正确的方式推送值:

<Style TargetType="{x:Type TreeViewItem}">
    <Setter Property="Controls:TreeViewHelper.IsMouseDirectlyOverItem"
            Value="{Binding Path=IsHovered, Mode=OneWayToSource}" />

    <Style.Triggers>
        ...
</Style>

编辑:由于IsMouseDirectlyOver是只读的,只读 DP 不能成为任何绑定的目标,Fredrik HedbladPushBinding可能是一种可能的解决方法:OneWayToSource Binding for ReadOnly Dependency Property

<Style TargetType="{x:Type TreeViewItem}">
    <Setter Property="pb:PushBindingManager.StylePushBindings">
        <Setter.Value>
            <pb:PushBindingCollection>
                <pb:PushBinding TargetDependencyProperty="Controls:TreeViewHelper.IsMouseDirectlyOverItem" 
                                Path="IsHovered" />
            </pb:PushBindingCollection>
        </Setter.Value>
    </Setter>

    <Style.Triggers>
        ...
</Style>
于 2013-04-19T21:05:47.537 回答