Изменить курсор мыши, когда нажата левая кнопка мыши? - PullRequest
4 голосов
/ 06 июня 2010

Мне нужно изменить курсор мыши, пока нажата левая кнопка мыши. К сожалению, изменения в курсоре мыши игнорируются, пока не будет отпущена левая кнопка мыши. Есть ли обходной путь к этому? Спасибо за любую подсказку!

(я использую WPF и C #)

EDIT:

Пример проекта: http://cid -0432ee4cfe9c26a0.skydrive.live.com / self.aspx /% c3% 96ffentlich / WpfApplication5.zip (просто запустите, инструкции показаны в приложении)

код для образца:

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>

Класс окон:

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)";
    }
}

Ответы [ 2 ]

7 голосов
/ 07 июня 2010

Я бы порекомендовал использовать события Preview *, где это возможно, для визуальных изменений, поскольку это будет держать вашу логику хорошо разделенной. Кроме того, лучше всего (IMHO) использовать свойство Mouse.OverrideCursor для временного изменения курсора.

Например:

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;
}
0 голосов
/ 19 июня 2015

В левом обработчике мыши вы можете иметь следующий код.

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

Вы можете сбросить курсор по умолчанию согласно вашему требованию.

...