如何在XAML中为边框设置MouseOver事件/触发器?

Bor*_*ris 71 wpf xaml triggers

如何在XAML中为边框设置MouseOver事件/触发器?我希望当鼠标悬停在边框上时边框变为绿色,然后当鼠标不再在边框上时返回蓝色.为什么我不能只使用以下代码:

<Border 
    Name="ClearButtonBorder" 
    Grid.Column="1" 
    CornerRadius="0,3,3,0" 
    Background="Blue">
    <Border.Triggers>
        <Trigger Property="Border.IsMouseOver" Value="True">
            <Setter Property="Border.Background" Value="Green" />
        </Trigger>
        <Trigger Property="Border.IsMouseOver" Value="False">
            <Setter Property="Border.Background" Value="Blue" />
        </Trigger>
    </Border.Triggers>
    <TextBlock 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center" 
        Text="X" />
</Border>
Run Code Online (Sandbox Code Playgroud)

我真的没有在WPF中获得这些触发器和样式.这样的拖累是不能实现这样简单的事情..请为我提供解决方案并帮助我理解我的代码到底有什么问题?谢谢一堆.

Gro*_*kys 135

是的,这令人困惑......

根据这篇博客文章,看起来这是WPF的遗漏.

为了使它工作,你需要使用一种风格:

    <Border Name="ClearButtonBorder" Grid.Column="1" CornerRadius="0,3,3,0">
        <Border.Style>
            <Style>
                <Setter Property="Border.Background" Value="Blue"/>
                <Style.Triggers>
                    <Trigger Property="Border.IsMouseOver" Value="True">
                        <Setter Property="Border.Background" Value="Green" />
                    </Trigger>
                </Style.Triggers>
            </Style>
        </Border.Style>
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Text="X" />
    </Border>
Run Code Online (Sandbox Code Playgroud)

我想这个问题并不常见,因为大多数人倾向于将这类事物分解为一种风格,因此它可以用于多个控件.

  • 我不同意这是一个错误或遗漏.在WPF中,有一个显式规则集定义属性值优先级.http://msdn.microsoft.com/en-us/library/ms743230.aspx (6认同)
  • 博文的链接已经死了 (3认同)
  • 谢谢您的回答.现在我知道它是如何完成的.尽管如此,它必须像这样实施的原因对我来说仍然是不合逻辑的.但我猜这没关系.:) (2认同)
  • 该链接已死,但https://msdn.microsoft.com/en-us/library/ms743230%28v=vs.100%29.aspx不是. (2认同)