【问题标题】:How to set MouseOver event/trigger for border in XAML?如何在 XAML 中为边框设置 MouseOver 事件/触发器?
【发布时间】:2010-03-05 16:52:59
【问题描述】:

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

我没有运气就尝试过:

<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 设置触发器或事件?

【问题讨论】:

    标签: wpf xaml triggers


    【解决方案1】:

    是的,这令人困惑……

    根据this blog post,看来这是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>
    

    我想这个问题并不常见,因为大多数人倾向于将这类东西分解成一种样式,因此它可以用于多个控件。

    【讨论】:

    • 感谢您的回答。现在我知道它是怎么做的了。尽管如此,它必须像这样实施的原因对我来说仍然不合逻辑。但没关系,我猜。 :)
    • 是的,我同意这是不合逻辑的。正如我所说,这似乎是 WPF 的一个错误/遗漏。
    • 我不同意这是错误或遗漏。在 WPF 中有一个明确的规则集定义属性值优先级。 msdn.microsoft.com/en-us/library/ms743230.aspx
    • 博文链接失效
    猜你喜欢
    • 2011-12-26
    • 2016-04-04
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多