我可以将 IsMouseOver 事件转发给 XAML 中的兄弟姐妹吗

Can I Forward IsMouseOver event to a sibling in XAML

我想将 IsMouseOver 事件从一个 XAML 元素转发到它的兄弟姐妹之一。
我也许可以通过 code-behind 使用 RaiseEvent(...) 调用来完成此操作,但我宁愿不这样做。
是否可以将 IsMouseOver 事件从一个兄弟绑定到另一个兄弟?

例如:
在下面的代码中,BlueBorder 元素的 IsMouseOver 事件将边框从蓝色变为绿色。
当鼠标悬停在 RedBorder 元素上时,我也希望 BlueBorder 变为绿色
(显然,我可以在 RedBorderStyle 中放置一个 IsMouseOver 触发器,但这不符合我的 real-world 目的)

<Window.Resources>
    <Style x:Key="BlueBorderStyle" TargetType="{x:Type Border}">
        <Setter Property="Background" Value="Blue"/>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="Background" Value="Green"/>
            </Trigger>
            <Trigger Property="IsMouseOver" Value="False">
                <Setter Property="Background" Value="Blue"/>
            </Trigger>
        </Style.Triggers>
    </Style>

    <Style x:Key="RedBorderStyle" TargetType="{x:Type Border}">
        <Setter Property="Background" Value="Red"/>
    </Style>
</Window.Resources>

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Border x:Name="BlueBorder" Grid.Column="0" Style="{StaticResource BlueBorderStyle}"/>
    <Border x:Name="RedBorder" Grid.Row="1" Style="{StaticResource RedBorderStyle}"/>
</Grid>

(或者也许我只是以错误的方式接近这个?)

一些背景知识:
我有一个 UserControl,上面有一个 header,下面有一个 ScrollView。 ScrollView 是这样写的,当鼠标在 ScrollView 上时,ScrollBars 是可见的,当鼠标离开时,滚动条消失。不幸的是,当鼠标移动到 header 时,滚动条也会消失,这不是我想要的。
我可以跨越 ScrollView 以包含 header,但 ScrollView 的视口也包含 header,这也不对。

建议?

您可以尝试触发容器的 IsMouseOver(这对两个元素都是通用的)。在此示例中,它将是网格。

<Window.Resources>
    <Style x:Key="BlueBorderStyle" TargetType="{x:Type Border}">
        <Setter Property="Background" Value="Blue"/>
        <Style.Triggers>
            <DataTrigger  Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource AncestorType={x:Type Grid}, AncestorLevel=1}}" Value="True">
                <Setter Property="Background" Value="Green"/>
            </DataTrigger>
            <DataTrigger  Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource AncestorType={x:Type Grid}, AncestorLevel=1}}" Value="False">
                <Setter Property="Background" Value="Blue"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>

    <Style x:Key="RedBorderStyle" TargetType="{x:Type Border}">
        <Style.Triggers>
            <DataTrigger  Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource AncestorType={x:Type Grid}, AncestorLevel=1}}" Value="True">
                <Setter Property="Background" Value="Purple"/>
            </DataTrigger>
            <DataTrigger  Binding="{Binding Path=IsMouseOver, RelativeSource={RelativeSource AncestorType={x:Type Grid}, AncestorLevel=1}}" Value="False">
                <Setter Property="Background" Value="Red"/>
            </DataTrigger>
        </Style.Triggers>
    </Style>
</Window.Resources>

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="1*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <Border x:Name="BlueBorder" Grid.Column="0" Style="{StaticResource BlueBorderStyle}"/>
    <Border x:Name="RedBorder" Grid.Row="1" Style="{StaticResource RedBorderStyle}"/>
</Grid>