gpt4 book ai didi

windows - 为什么 ContentDialog 中的 TextBox 不自动滚动到键盘上方

转载 作者:可可西里 更新时间:2023-11-01 10:35:13 24 4
gpt4 key购买 nike

我注意到如果TextBoxPage ,然后一切正常。每当 TextBox获得焦点时,它将滚动到键盘上方的正确位置,以便用户在输入时能够看到文本。 ContentDialog 有点不同无论出于何种原因。 TextBox很容易被键盘盖住。我缺少任何明显的设置吗?

我创建一个默认值 ContentDialog并将代码复制到页面。并得到如下截图。除了上层 XAML 元素是 <ContentDialog> 之外,其他一切都是一样的。对于左列,<Page>对于右栏。

左图 - ContentDialog在弹出键盘之前
右图 - Page在弹出键盘之前

左图 - ContentDialog弹出键盘后
右图 - Page弹出键盘后

相关代码如下:

<StackPanel VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<TextBox Name="email" Header="Email address"/>
<PasswordBox Name="password" Header="Password"/>
<CheckBox Name="showPassword" Content="Show password"/>

<!-- Content body -->
<TextBlock Name="body" Style="{StaticResource MessageDialogContentStyle}" TextWrapping="Wrap">
<TextBlock.Text>
Lorem ipsum dolor sit amet, consectetur adipisicing elit,
sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
</TextBlock.Text>
</TextBlock>
</StackPanel>

为什么不是 TextBox里面ContentDialog在键盘上方滚动,就像 Page 中的一样?

最佳答案

一旦我遇到与 TextBox 类似的问题并找到 answer here .基本上,一旦显示键盘,焦点元素就不会向上移动,您可以通过进行额外的转换来纠正此行为:

// add this code somewhere to your constructor of your page or content dialog - where the problematic TextBox is located
Windows.UI.ViewManagement.InputPane.GetForCurrentView().Showing += (s, args) =>
{
const double extraHeightBuffer = 20.0;

UIElement focused = FocusManager.GetFocusedElement() as UIElement;
if (null != focused)
{
GeneralTransform gt = focused.TransformToVisual(this);
Point focusedPoint = gt.TransformPoint(new Point(0, focused.RenderSize.Height - 1));
double bottomOfFocused = focusedPoint.Y + extraHeightBuffer;
if (bottomOfFocused > args.OccludedRect.Top)
{
var trans = new TranslateTransform();
trans.Y = -(bottomOfFocused - args.OccludedRect.Top);
this.RenderTransform = trans;
}
args.EnsuredFocusedElementInView = true;
}
};

Windows.UI.ViewManagement.InputPane.GetForCurrentView().Hiding += (s, args) =>
{
var trans = new TranslateTransform();
trans.Y = 0;
this.RenderTransform = trans;
args.EnsuredFocusedElementInView = false;
};

关于windows - 为什么 ContentDialog 中的 TextBox 不自动滚动到键盘上方,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31210044/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com