Код: Выделить всё
Код: Выделить всё
private void ToggleButton_OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("Message");
}
При вызове MessageBox событие PreviewMouseUp не произойдет. Но если я закрою окно сообщения с помощью клавиши пробела, а затем отпущу кнопку мыши, произойдет событие PreviewMouseUp. Но ToggleButton все равно не перейдет в нажатое состояние.
Дополнение 2
Остается неизвестным, что происходит в недрах WPF. Но возможное решение - добавление в обработчик:
Код: Выделить всё
((ToggleButton)sender).IsChecked = !((ToggleButton)sender).IsChecked;
Минимальный воспроизводимый пример можно создать следующим образом. Сначала создайте проект WPF с помощью командной строки следующим образом:
Код: Выделить всё
dotnet new wpf --name "PreviewMouseDown" -lang "C#"
cd PreviewMouseDown
Код: Выделить всё
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Input;
namespace PreviewMouseDown;
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void ToggleButton_OnPreviewMouseDown(object sender, MouseButtonEventArgs e)
{
MessageBox.Show("Message");
}
}
Код: Выделить всё
Код: Выделить всё
dotnet build
dotnet run

Примечание - воспроизведено с помощью net10.0-windows
Подробнее здесь: https://stackoverflow.com/questions/798 ... ton-toggle
Мобильная версия