
Хотя это работает, у меня есть проблема с удобством использования. Поведение по умолчанию при открытии ContentDialog — установка фокуса на первый интерактивный элемент, которым является флажок. Я не хочу этого. Я хочу, чтобы фокус был на кнопке по умолчанию, то есть CloseButton. Это самый безопасный неразрушающий элемент пользовательского интерфейса.
Мне известен метод VisualTreeHelper.GetOpenPopupsForXamlRoot(), и я экспериментировал с ним в диалоговом окне «Открыто». обработчик событий, но навигация по последующей иерархии не является простой (
Код: Выделить всё
FindName("CloseButton")
Я также попытался добавить обработчик событий gettiveFocus для флага и выполнить args.tracancel () Если диалог только что открылся, но это фактически в итоге начнуло фокус на родительское окно, которое Определенно не то, что я хочу! < /p>
, чтобы воссоздать эту проблему: < /p>
- Создать новый проект в визуализации Студия. Выберите «Пустое приложение, упакованное (winui 3 в настольном компьютере)» в качестве шаблона проекта.
- Назовите проект "Checkboxtest".
< /li>
заменить mainwindow.xaml < /code> на XAML ниже: < /p>
< /li>
< /ol>Замените код MainWindow.xaml.cs на:Код: Выделить всё
Код: Выделить всё
using System;
using Microsoft.UI.Xaml;
using Microsoft.UI.Xaml.Controls;
using Microsoft.UI.Xaml.Input;
namespace CheckboxTest;
public sealed partial class MainWindow : Window
{
public MainWindow()
{
this.InitializeComponent();
this.Content.KeyUp += Content_KeyUp;
}
private async void Content_KeyUp(object sender, KeyRoutedEventArgs e)
{
if (e.Key == Windows.System.VirtualKey.Delete)
{
DeleteConfirmationDialog.XamlRoot = Content.XamlRoot;
if (await DeleteConfirmationDialog.ShowAsync() == ContentDialogResult.Primary)
{
// Do delete operation...
}
}
}
}
- Запустите проект.
- Нажмите Удалить и увидите, что в появившемся диалоговом окне подтверждения установлен флажок.
Подробнее здесь: https://stackoverflow.com/questions/793 ... log-button