Как сохранить фокусировку при нажатии отключенной кнопки в средстве прокрутки в xaml?

При создании пустого приложения C++ xaml для UWP из Visual Studio по умолчанию добавьте следующий код на страницу xaml.

       <ScrollViewer>
            <StackPanel>
                <TextBox Height="20"></TextBox>
                <TextBox Height="800"></TextBox>
                <Button Content="Enabled" IsEnabled="True"></Button>
                <Button Content="Disabled" IsEnabled="False"></Button>
            </StackPanel>
        </ScrollViewer>

Если я наведу фокус на кнопку "Включено" и после этого нажму на кнопку "отключено", фокус сместится на первый текстовый блок.

Я нашел обходной путь, чтобы добавить фокусируемый элемент 0 размера в качестве первого элемента панели стека. <Button Width="0" Height="0"></Button>

Но это повлияет на других детей. (Идентификатор будет изменен на 1)

Знаете ли вы более элегантный способ сохранить фокус на предыдущем элементе после нажатия отключенной кнопки на панели из средства просмотра scollviewer?

Поведение отсутствует, если панель стека отсутствует в средстве просмотра прокрутки.

2 ответа

Нашел решение. На PointerPressed получите текущий сфокусированный элемент как UIElement^ и захватите указатель

Вы можете программно изменить фокус приложения в ScrollViewerпрослушанное событие.

В xaml:

<ScrollViewer Tapped="ScrollViewer_Tapped">
    <StackPanel>
        <TextBox Height="20"></TextBox>
        <TextBox Height="200"></TextBox>
        <Button Content="Enabled"  x:Name="EnableButton"></Button>
        <Button Content="Disabled" IsEnabled="False"></Button>
    </StackPanel>
</ScrollViewer>

В xaml.cpp обработайте ScrollViewer_Tapped событие, чтобы сделать EnableButton получить фокус.

void CApp::MainPage::ScrollViewer_Tapped(Platform::Object^ sender, Windows::UI::Xaml::Input::TappedRoutedEventArgs^ e)
{
    EnableButton->Focus(Windows::UI::Xaml::FocusState::Programmatic);
}

Если у вас есть другие элементы управления, которые могут получить фокус, вам также следует обработать их аналогичное событие, чтобы назначить фокус.

Другие вопросы по тегам