将鼠标光标更改为"停止"指针悬停在WPF中的禁用按钮上

时间:2016-08-05 07:07:03

标签: c# .net wpf xaml

我希望鼠标光标变为"停止"我将鼠标悬停在按钮上时指针,如果它被禁用。如果启用了按钮,则以下代码正在运行,但它不适用于已禁用的按钮:

XAML:

<Button x:Name="Button1" Content="Button1" Isenabled="false" />

CS:

Button1.MouseEnter += (s, e) => Mouse.OverrideCursor = Cursors.No;

2 个答案:

答案 0 :(得分:5)

由于您无法使用禁用控件触发事件,我建议在其上放置一个透明矩形,它将为您处理:

<Button x:Name="Button1" IsEnabled="False"/>
<Rectangle Opacity="0" Fill="Transparent">
    <Rectangle.Style>
        <Style TargetType="Rectangle">
            <Setter Property="Visibility" Value="Collapsed"/>
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=Button1, Path=IsEnabled}" 
                             Value="False">
                    <Setter Property="Cursor" Value="No"/>
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Rectangle.Style>
</Rectangle>

当未启用按钮时,矩形会折叠,因此它将允许触发按钮事件。启用该按钮后,矩形变为可见(0不透明度和透明背景),并且当鼠标悬停时不会显示光标。

修改

根据评论,这里有一个工作样本(也试图解决OP正在启用按钮取消行为的问题):

<Window x:Class="WpfApplication.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApplication"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <StackPanel Orientation="Horizontal" VerticalAlignment="Center"
                    HorizontalAlignment="Center">
            <!-- Regular Button-->
            <Button Width="120" Height="22" Margin="5"/>

            <!--Custom Button-->
            <Grid Width="120" Height="22" Margin="5">
                <Button x:Name="Button1" IsEnabled="False"/>
                <Rectangle Opacity="0" Fill="Transparent">
                    <Rectangle.Style>
                        <Style TargetType="Rectangle">
                            <Setter Property="Visibility" Value="Collapsed"/>
                            <Style.Triggers>
                                <DataTrigger Binding="{Binding ElementName=Button1, Path=IsEnabled}" 
                             Value="False">
                                    <Setter Property="Cursor" Value="No"/>
                                    <Setter Property="Visibility" Value="Visible"/>
                                </DataTrigger>
                            </Style.Triggers>
                        </Style>
                    </Rectangle.Style>
                </Rectangle>
            </Grid>
        </StackPanel>
    </Grid>
</Window>

这是演示:

enter image description here

我建议使用类似的XAML创建自定义控件,或者至少创建一个模板,以便您可以重复使用它。

答案 1 :(得分:3)

您无法对已禁用的对象执行任何操作。