简体   繁体   English

按下鼠标左键时更改鼠标光标?

[英]Change mouse cursor while left mouse button is pressed?

I need to change the mouse cursor while the left mouse button is pressed. 我需要在按下鼠标左键时更改鼠标光标。 Unfortunately changes to the mouse cursor are ignored until the left mouse button is released. 不幸的是,在释放鼠标左键之前,忽略对鼠标光标的更改。 Is there any workaround to this? 这有什么解决方法吗? Thanks for any hint! 谢谢你的提示!

(I'm using WPF and C#) (我正在使用WPF和C#)

EDIT: 编辑:

Sample Project: http://cid-0432ee4cfe9c26a0.skydrive.live.com/self.aspx/%c3%96ffentlich/WpfApplication5.zip (just run it, instructions are shown in the application) 示例项目: http//cid-0432ee4cfe9c26a0.skydrive.live.com/self.aspx/%c3%96ffentlich/WpfApplication5.zip (只需运行它,说明显示在应用程序中)

Code for the sample: 样本代码:

XAML: XAML:

<Window x:Class="WpfApplication5.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="695" Loaded="Window_Loaded">
<Grid>
    <Button Content="Button1" Height="287" HorizontalAlignment="Left" Margin="12,12,0,0" Name="button1" VerticalAlignment="Top" Width="235" />
    <Button Content="Button2" Height="287" HorizontalAlignment="Left" Margin="284,12,0,0" Name="button2" VerticalAlignment="Top" Width="278" MouseMove="button2_MouseMove" />
</Grid>

Window class: 窗口类:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void button2_MouseMove(object sender, MouseEventArgs e)
    {
        Cursor = Cursors.Cross;
    }

    private void Window_Loaded(object sender, RoutedEventArgs e)
    {
        button1.Content="Step1: Left click on this button, \nhold down the left mouse button";
        button2.Content = "(Make sure you don't hover this\n button before hovering Button1.\n Default application cursor\n is the normal arrow cursor)\n\n Step 2: Keep on holding the left mouse \nbutton, hover this button\n\nThe cursor won't change. (It will change after the \nleft mouse button was released)";
    }
}

I would recommend using Preview* events where possible for visual changes, as it will keep your logic nicely separated. 我建议尽可能使用Preview *事件进行视觉更改,因为它会使您的逻辑很好地分开。 Also, it is best (IMHO) to use the Mouse.OverrideCursor property to change the cursor temporarily. 此外,最好(恕我直言)使用Mouse.OverrideCursor属性临时更改光标。

For example: 例如:

void Window_Loaded(object sender, RoutedEventArgs e)
{
    // ...
    button1.PreviewMouseLeftButtonDown += Button1_PreviewMouseLeftButtonDown;
    button1.PreviewMouseLeftButtonUp += Button1_PreviewMouseLeftButtonUp;
}

void Button1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    Mouse.OverrideCursor = Cursors.Cross;
    Mouse.Capture(button1);
}

void Button1_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    Mouse.Capture(null);
    Mouse.OverrideCursor = null;
}

In left mouse down handler you can have following code. 在鼠标左键处理程序中,您可以使用以下代码。

try
{
   Cursor = Cursors.WaitCursor;
}
catch(Exception ex)
{
}
finally
{
   Cursor = Cursors.Default;
}

You can reset to Default cursor as per your requirement. 您可以根据需要重置为默认光标。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM