Панель ввода охватывает сфокусированное текстовое поле в WebView, вложенное во всплывающее окно (UWP) - PullRequest
0 голосов
/ 22 января 2020

У меня есть элемент управления UWP, который содержит Popup с Grid, в котором есть WebView, как показано ниже:

WebFlyoutView.xaml

<controls:PageViewBase
    x:Class="SomeNamespace.UI.Views.WebFlyoutView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:controls="using:SomeNamespace.UI.Core.Controls"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    x:Name="WebFlyoutViewModel"
    d:DataContext="{Binding Source={StaticResource ViewModelLocator}, Path=WebFlyoutViewModel}"
    mc:Ignorable="d">

    <Grid x:Name="PopupGrid">
        <Popup
            x:Name="WebFlyoutViewPopup"
            HorizontalAlignment="Stretch"
            VerticalAlignment="Stretch"
            IsOpen="{Binding IsModalLoaded}">
            <Grid>
                <Border Width="{Binding ActualWidth, ElementName=PopupGrid}" Height="{Binding ActualHeight, ElementName=PopupGrid}">
                    <ProgressRing
                        x:Name="WebFlyoutViewProgressRing"
                        Grid.Row="0"
                        IsActive="{x:Bind IsWebViewNavigationCompleted, Converter={StaticResource InverseBooleanConverter}, Mode=OneWay}"
                        Style="{StaticResource LightThemeLargeProgressRingStyle}"
                        Visibility="{x:Bind IsWebViewNavigationCompleted, Converter={StaticResource InverseVisibilityConverter}, Mode=OneWay}" />
                </Border>
                <WebView
                    Width="{Binding ActualWidth, ElementName=PopupGrid}"
                    Height="{Binding ActualHeight, ElementName=PopupGrid}"
                    HorizontalAlignment="Stretch"
                    VerticalAlignment="Stretch"
                    DefaultBackgroundColor="Transparent"
                    NavigationCompleted="WebView_OnNavigationCompleted"
                    NavigationStarting="WebView_OnNavigationStarting"
                    Source="{Binding WebViewServerBaseUri}"
                    Visibility="{x:Bind IsWebViewNavigationCompleted, Converter={StaticResource VisibilityConverter}, Mode=OneWay}" />
            </Grid>
        </Popup>
    </Grid>
</controls:PageViewBase>

WebFlyoutView.xaml.cs

public sealed partial class WebFlyoutView : PageViewBase, IWebFlyoutView, INotifyPropertyChanged
{
    ...
    public WebFlyoutView()
    {
        InitializeComponent();

        InputPane.GetForCurrentView().Showing += InputPane_Showing;
    }

    private void InputPane_Showing(InputPane sender, InputPaneVisibilityEventArgs args)
    {
        args.EnsuredFocusedElementInView = false;
    }
    ...
}

И это дерево визуалов при запуске приложения: Визуальное дерево моего работающего приложения .

Проблема в том, что когда я запускаю приложение на симуляторе и фокусируюсь на поле ввода HTML в WebView, представление не перемещается вверх, чтобы оно не закрывалось экранной клавиатурой. Однако, когда я не использую Popup в качестве контейнера для WebView, приложение ведет себя, как и ожидалось, выдвигая поле ввода с фокусировкой в ​​WebView над экранной клавиатурой.

Согласно Popup документация Microsoft:

Всплывающее окно может содержать элементы управления вводом. При размещении элементов управления вводом, таких как TextBox, сенсорная клавиатура может появиться, когда пользователь касается элемента управления вводом. Если родительский контейнер всплывающего окна уже находится в визуальном дереве, всплывающее окно автоматически перемещается, когда отображается сенсорная клавиатура. В противном случае всплывающее окно не перемещается и сенсорная клавиатура может его закрыть. Это может произойти, если вы создадите Popup в коде и установите IsOpen в true, не добавляя Popup как дочерний элемент элемента в визуальном дереве.

Хотя я вложил Popup в Grid приложение по-прежнему не предпринимает действий, чтобы экранная клавиатура не закрывала WebView в Popup.

Может кто-нибудь посоветовать, как мне это исправить?

...