Когда я вызываю CaptureMouse () в ответ на MouseDown от средней кнопки мыши, он захватывает и затем отпускает мышь.
А?
Я пытался использовать предварительный просмотр событий, установив Handled = true, ничего не изменилось. Я не понимаю захват мыши в WPF?
Вот небольшой пример кода, который воспроизводит проблему.
// TestListBox.cs
using System.Diagnostics;
using System.Windows.Controls;
namespace Local
{
public class TestListBox : ListBox
{
public TestListBox()
{
MouseDown += (_, e) =>
{
Debug.WriteLine("+MouseDown");
Debug.WriteLine(" Capture: " + CaptureMouse());
Debug.WriteLine("-MouseDown");
};
GotMouseCapture += (_, e) => Debug.WriteLine("GotMouseCapture");
LostMouseCapture += (_, e) => Debug.WriteLine("LostMouseCapture");
}
}
}
При создании приложения WPF по умолчанию, которое имеет это для своего главного окна, будет использоваться тестовый класс:
<Window x:Class="Local.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Local"
Title="MainWindow" Height="350" Width="525">
<local:TestListBox>
<ListBoxItem>1</ListBoxItem>
<ListBoxItem>2</ListBoxItem>
<ListBoxItem>3</ListBoxItem>
<ListBoxItem>4</ListBoxItem>
</local:TestListBox>
</Window>
После нажатия средней кнопки вниз я получаю следующий вывод:
+MouseDown
GotMouseCapture
LostMouseCapture
Capture: True
-MouseDown
Поэтому я вызываю CaptureMouse, которая, в свою очередь, захватывает, а затем освобождает захват, но возвращает true, что захват был успешно получен.
Что здесь происходит? Возможно ли, что мой драйвер мыши Logitech делает что-то глупое, пытается запустить 'ultrascroll' или что-то в этом роде?