【问题标题】:ContentDialog hidden behind soft keyboard UWP隐藏在软键盘 UWP 后面的 ContentDialog
【发布时间】:2021-07-23 12:53:17
【问题描述】:

我开发了一个 UWP 应用程序,该应用程序在新版本的 Windows 10 上出现错误行为。在我的应用程序中,我有一些 ContentDialog,其中包含一些 TextBox,当显示软键盘时,它应该向上推 contentdialog,但在新版本中Windows 10没有发生这种情况,有人知道为什么吗? 这是我的 ContentDialog 代码示例:

<ContentDialog
x:Class="ManImp.CDEseguiOdM"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:ManImp"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
MaxHeight="{StaticResource ContentDialogMaxHeight}"
MaxWidth="{StaticResource ContentDialogMaxWidth}"
Margin="0"
Padding="0">

<Grid Background="{ThemeResource ApplicationBackGroudColor}">

    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"></RowDefinition>
        <!--0-->
        <RowDefinition Height="Auto"></RowDefinition>
        <!--0-->
        <RowDefinition Height="Auto"></RowDefinition>
        <!--1-->
        <RowDefinition Height="Auto"></RowDefinition>
        <!--2-->
        <RowDefinition Height="Auto"></RowDefinition>
        <!--3-->
    </Grid.RowDefinitions>

    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"></ColumnDefinition>
    </Grid.ColumnDefinitions>

    <StackPanel Orientation="Vertical" x:Name="stckLabelFirma" Grid.Row="0" Grid.Column="0">
        <TextBlock x:Name="lblFirma" VerticalAlignment="Center" TextWrapping="Wrap" FontSize="24" Foreground="White" FontWeight="Normal" HorizontalAlignment="Center" Margin="0,0,0,5"></TextBlock>
    </StackPanel>

    <StackPanel Orientation="Vertical" Grid.Row="1"  Grid.Column="0">
        <InkToolbar InitialControls="None" VerticalAlignment="Top" HorizontalAlignment="Right" TargetInkCanvas="{x:Bind inkCanvasFirma}" >
            <InkToolbarEraserButton />
            <InkToolbarBallpointPenButton />
        </InkToolbar>

        <Grid BorderBrush="Black" BorderThickness="1">
            <Image Name="imgFirma" Stretch="Uniform"></Image>
            <InkCanvas x:Name="inkCanvasFirma" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"></InkCanvas>
        </Grid>
    </StackPanel>

    <StackPanel Orientation="Vertical" x:Name="stckDatiSupProd" Grid.Row="2" Grid.Column="0">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"></ColumnDefinition>
                <!--0-->
                <ColumnDefinition Width="*"></ColumnDefinition>
                <!--1-->
                <ColumnDefinition Width="*"></ColumnDefinition>
                <!--2-->
            </Grid.ColumnDefinitions>

            <StackPanel Orientation="Vertical" Grid.Column="0" Margin="0,10,5,0">
                <TextBlock x:Name="lblCID"  VerticalAlignment="Center" TextWrapping="Wrap" FontSize="20" Foreground="#FF034872" FontWeight="Bold" HorizontalAlignment="Left" Margin="0,0,0,0"></TextBlock>
                <TextBox x:Name="txtCID" BorderBrush="Red" MaxLength="8" TextChanged="txtCID_TextChanged" VerticalAlignment="Center" Background="White" HorizontalAlignment="Stretch"  Margin="0,10,0,0" TextWrapping="Wrap" FontSize="20"></TextBox>
            </StackPanel>

            <StackPanel Orientation="Vertical" Grid.Column="1" Margin="5,10,5,0">
                <TextBlock x:Name="lblAlias"  VerticalAlignment="Center" TextWrapping="Wrap" FontSize="20" Foreground="#FF034872" FontWeight="Bold" HorizontalAlignment="Left" Margin="0,0,0,0"></TextBlock>
                <TextBox x:Name="txtAlias" BorderBrush="Red" TextChanged="txtAlias_TextChanged" VerticalAlignment="Center" Background="White" HorizontalAlignment="Stretch" Margin="0,10,0,0" TextWrapping="Wrap" FontSize="20"></TextBox>
            </StackPanel>

            <StackPanel Orientation="Vertical" Grid.Column="2" Margin="5,10,0,0">
                <TextBlock x:Name="lblPIN"  VerticalAlignment="Center" TextWrapping="Wrap" FontSize="20" Foreground="#FF034872" FontWeight="Bold" HorizontalAlignment="Left" Margin="0,0,0,0"></TextBlock>
                <PasswordBox x:Name="txtPIN" BorderBrush="Red" PasswordChanged="txtPIN_PasswordChanged" VerticalAlignment="Center" Background="White" HorizontalAlignment="Stretch" Margin="0,10,0,0" FontSize="20"></PasswordBox>
            </StackPanel>
        </Grid>
    </StackPanel>

    <StackPanel Orientation="Vertical" Grid.Row="3" Grid.Column="0" Margin="0,10,0,0">
        <TextBlock x:Name="lblErrore" Visibility="Collapsed" VerticalAlignment="Center" TextWrapping="Wrap" FontSize="14" Foreground="Red" FontWeight="Bold" HorizontalAlignment="Left" Margin="0,5,0,0"></TextBlock>
    </StackPanel>

    <StackPanel Orientation="Vertical" Grid.Row="4" Margin="0,10,0,0" Grid.Column="0">
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"></ColumnDefinition>
                <!--0-->
                <ColumnDefinition Width="*"></ColumnDefinition>
                <!--1-->
            </Grid.ColumnDefinitions>

            <Button x:Name="btnAnnulla" Grid.Column="0"  HorizontalAlignment="Stretch" Margin="0,30,10,0" VerticalAlignment="Top" Click="btnAnnulla_Click"></Button>
            <Button x:Name="btnConfFirmaSupProd" Grid.Column="1" HorizontalAlignment="Stretch" Margin="10,30,0,0" VerticalAlignment="Top" Click="btnConfFirmaSupProd_Click"></Button>
            <Button x:Name="btnConfFirmaOperatore" Grid.Column="1" HorizontalAlignment="Stretch" Margin="10,30,0,0" VerticalAlignment="Top" Click="btnConfFirmaOperatore_Click"></Button>
        </Grid>
    </StackPanel>
</Grid>

【问题讨论】:

  • 您能告诉我您在哪个 Windows 10 版本上遇到过这种行为吗?您的代码在哪个 Windows 10 版本上正常运行?
  • @RoyLi-MSFT 嗨,我遇到这种行为的 windows 10 版本是 19041,它的工作正常是 14393
  • 你在18363或17763等其他设备上试过了吗?这些 Windows 10 版本的行为是什么?
  • @RoyLi-MSFT 我没有这些版本的设备,所以我无法查看
  • 我在称为 20H2 的 Build 19042 中对此进行了测试,我得到了不同的行为。我先把我的设备变成了平板电脑模式。然后我创建了一个新的 UWP 应用程序,它将显示 ContentDialog。当我想在ContentDialog 中向TextBox 输入内容时,当屏幕键盘显示时ContentDialog 将向上移动。 Build 14393 是很久以前的早期版本。我建议您在装有最新版本 Windows 10 的设备上运行该应用程序以检查行为。

标签: c# xaml uwp windows-10-universal


【解决方案1】:

这应该是与旧 SDK 相关的问题,当应用针对 14393 等旧版本时。

如果您真的想在所有版本的 Windows 10 上实现此行为。我建议您通过 InputPane.Showing EventInputPane.Hiding Event 手动处理显示和隐藏事件。然后您可能需要自定义一个看起来像ContentDialogPopUp 控件。我们无法更改ContentDialog 的位置,因为它是由系统处理的。但我们可以改变PopUp 控件的位置。

当屏幕键盘显示时,显示事件将被触发,您可以尝试手动向上移动PopUp 控件。隐藏键盘后,只需将PopUp 控件移回其原始位置即可。

这里是关于如何处理显示和隐藏事件的示例代码:

        protected override void OnNavigatedTo(NavigationEventArgs e)
    {
        InputPane currentInputPane = InputPane.GetForCurrentView();
        // Subscribe to Showing/Hiding events
        currentInputPane.Showing += OnShowing;
        currentInputPane.Hiding += OnHiding;
    }

    protected override void OnNavigatedFrom(NavigationEventArgs e)
    {
        InputPane currentInputPane = InputPane.GetForCurrentView();
        // Unsubscribe from Showing/Hiding events
        currentInputPane.Showing -= OnShowing;
        currentInputPane.Hiding -= OnHiding;
    }

    void OnShowing(InputPane sender, InputPaneVisibilityEventArgs e)
    {
        //do something
    }

    void OnHiding(InputPane sender, InputPaneVisibilityEventArgs e)
    {
        //do something
    }

您还可以在此处获取有关触摸键盘的信息:Respond to the presence of the touch keyboard

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 2011-09-22
    相关资源
    最近更新 更多