【发布时间】:2020-04-20 18:26:13
【问题描述】:
我的应用程序有一堆段落,它们被一起比较。这是使用通用ItemsRepeater 实现的,它创建与段落一样多的Grid 元素。每个网格内都有一个带有段落编号的TextBlock,以及一个包含该段落的RichTextBlock。因此层次结构是这样的:
<ItemsRepeater>
<Grid>
<TextBlock />
<RichTextBlock></RichTextBlock/>
</Grid>
<Grid>
...
</Grid>
<Grid>
...
</Grid>
</ItemsRepeater>
这会导致如下文本选择:
一次只能选择一个RichTextBlock。但是,我想允许对ItemsRepeater 的所有段落进行文本选择。这怎么可能?
编辑
我对其他方法持开放态度。我尝试用项目手动填写StackPanel 或RichTextBlock。这不是问题。但是,由于编号段落需要对齐,我需要能够设置它们的高度以相互匹配。据我所知,只有派生自FrameworkElement 的元素才具有我需要的ActualHeight 和Height 属性。但是,FrameworkElements 像 TextBlock 和 RichTextBlock 也不允许多选,这是我首先要解决的问题。有人posted a response to a similar question about WPF,但它使用了一个我认为不适用的奇怪解决方案。
所以问题也可以这样表述:如何在TextBlock 或RichTextBlock 中找到并设置Run 的高度?使用这个想法,get/set the run height inside a paragraph. 是不可能的,我不一定要使用ItemsRepeater,但这也没有产生有用的结果。我正在寻求避免为此诉诸 HTML/Javascript。
【问题讨论】:
-
我认为你做不到。您是否尝试过使用
<Run></Run>? -
文本选择只能选择当前文本控件内的内容,不能跨控件选择文本。如果要达到效果,需要把所有的段落放在一个richTextBlock中。您可以尝试使用 Windows.UI.Xaml.Documents 命名空间下的文本类(例如 Run、Paragraph 等)填充 RichTextBlock。
-
@Muzib 我过去做过。唯一的问题是每列中的段落最终会处于不同的高度,而不是齐平。我想我必须测量每个段落的高度并使它们相等。
-
@Faywang-MSFT 不幸的是,“‘ItemsRepeater’类型的值不能添加到‘BlockCollection’类型的集合或字典中。”
-
整件事令人沮丧,因为 UWP 忽略了从 @ 派生
Run、Span、LineBreak或任何其他可以进入TextBlock或RichTextBlock的相关元素987654350@,表示找不到ActualHeight,也无法设置Height。但是,不能随意选择多个TextBlocks或RichTextBlocks。
标签: c# xaml gridview uwp paragraph