【问题标题】:How to bring an element inside a list view item to the front of the entire app?如何将列表视图项中的元素带到整个应用程序的前面?
【发布时间】:2020-09-10 18:58:10
【问题描述】:

使用 UWP XAML,我正在尝试从 Postman 重新创建此文本框 UX,它会在应用程序中的所有其他元素上方弹出以显示全文:https://streamable.com/avrixo。我几乎完全重新创建了这个 UX,但是当文本框位于列表视图中时,我无法将文本框带到应用程序的“前面”。

我尝试过的:

我尝试为自定义文本框创建一个用户控件,其中 Canvas 作为其父级。像这样:

<Canvas>
  <TextBox/>
</Canvas

当用户关注文本框时,我添加了一些事件处理来更改文本换行和 Canvas.Zindex 附加属性(我尝试将 z-index 设置为 1、10、100 和 1000000)。但是,我发现随着文本框垂直扩展,无论我给它什么 z-index,它都保持在它下面的列表视图项的“后面”。

如何将列表视图项中的文本框带到 UI 的“前面”?

【问题讨论】:

  • 这看起来像是某种ToolTip,解释了它是如何出现在其他一切之上的。
  • @CorentinPane ToolTip 和 Flyout 不是理想的 UX,因为它是原始文本框的独立元素,因此焦点从原始元素跳转到工具提示/弹出窗口。不幸的是,基于我最初的弹出实验,这是一个尴尬的用户体验。

标签: c# xaml uwp winui


【解决方案1】:

在这种情况下,我不认为您的问题出在 z-index 上。 ListView 中的问题是每个 ListViewItem 都有自己的边界,因此 TextBox 被项目的边界框剪切。您至少可以使用 Visual Tree 工具仔细检查边界区域以确认问题所在。

如果您不希望 ListViewItem 扩大大小以匹配,我可以看到两个选项。当用户单击以进行编辑时,您将“假”文本框(绑定到 ListView 或数据项中的原始文本)放在 1)您显示的弹出窗口中或 2)作为页面 XAML 一部分的覆盖中有文本框。

您可以从原始文本框中获取选择状态和光标位置等,并将焦点移动到新文本框并镜像相同的状态。

这就是我想我会采取的方法。

【讨论】:

  • If you don't want the ListViewItem to expand in size to match。我最终采用了这种方法。谢谢?
猜你喜欢
  • 2023-03-30
  • 2015-05-08
  • 2011-11-23
  • 1970-01-01
  • 2021-07-25
  • 1970-01-01
  • 2019-09-19
  • 1970-01-01
  • 2021-10-18
相关资源
最近更新 更多