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


72

我希望当鼠标悬停在边框上时边框变为绿色,然后当鼠标不再位于边框上时边框变为蓝色。

我没有运气就尝试了这个:

<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>

如何设置MouseOver的触发器或事件?

Answers:


143

是的,这令人困惑...

根据此博客文章,看来这是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>

我猜这个问题并不普遍,因为大多数人倾向于将这种事情分解为一种样式,因此可以在多个控件上使用。


2
谢谢您的回答。现在我知道如何完成。但是,对于我来说,必须像这样实现它的原因仍然是不合逻辑的。但这没关系,我猜。:)
鲍里斯(Boris)2010年

是的,我同意这是荒谬的。正如我所说,这似乎是WPF的错误/遗漏。
Grokys

6
我不同意这是错误还是遗漏。在WPF中,有一个明确的规则集定义属性值优先级。msdn.microsoft.com/en-us/library/ms743230.aspx
Andrew Shepherd

3
博客文章的链接已失效
franssu 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.