C# 如何在UWP应用程序中跨文本块扩展文本选择

C# 如何在UWP应用程序中跨文本块扩展文本选择,c#,xaml,gridview,uwp,paragraph,C#,Xaml,Gridview,Uwp,Paragraph,我的应用程序有一堆段落,这些段落被比较在一起。这是使用一个通用的ItemsRepeater实现的,它创建的Grid元素数量与段落数量相同。每个网格内都有一个带有段落编号的TextBlock,以及一个包含段落的RichTextBlock。因此,层次结构如下所示: <ItemsRepeater> <Grid> <TextBlock /> <RichTextBlock></RichTextBlo

我的应用程序有一堆段落,这些段落被比较在一起。这是使用一个通用的
ItemsRepeater
实现的,它创建的
Grid
元素数量与段落数量相同。每个网格内都有一个带有段落编号的
TextBlock
,以及一个包含段落的
RichTextBlock
。因此,层次结构如下所示:

   <ItemsRepeater>
      <Grid>
         <TextBlock />
         <RichTextBlock></RichTextBlock/>
      </Grid>
      <Grid>
         ...
      </Grid>
      <Grid>
         ...
      </Grid>
   </ItemsRepeater>

...
...
这将导致如下文本选择:

一次只能选择一个
RichTextBlock
。但是,我希望允许对
ItemsRepeater
的所有段落进行文本选择。这怎么可能

编辑

我对其他方法持开放态度。我尝试过用项目手动填充
StackPanel
RichTextBlock
。这不是问题。但是,因为编号的段落需要对齐,所以我需要能够设置它们的高度以相互匹配。据我所知,只有从
FrameworkElement
派生的元素才具有我需要的
ActualHeight
Height
属性。但是,
FrameworkElement
s如
TextBlock
RichTextBlock
也不允许多重选择,这是我首先要解决的问题。有人,但它使用了一个奇怪的解决方案,我认为不适用


因此,这个问题也可以被定义为:如何在
TextBlock
RichTextBlock
中找到并设置
运行的高度?使用这个想法,我不可能不使用
ItemsRepeater
,但这也没有产生有用的结果。我试图避免使用HTML/Javascript来实现这一点。

UWP没有为您提供足够的API来实现这一点。我与RichEditBox在UWP上处理过类似的问题,但我没有找到好的解决方案。但如果你真的想这样做,有两种主要方法可以实现:

  • 通过嗅探鼠标事件自己实现选择,并在控件顶部呈现选择。有太多的角落案例,特别是如果您想要为正在构建的控件创建一个适当的可访问性树
  • 另一方面,您可以创建一个WrRT+C++项目,在那里您可以访问更多API,构建控件并将其呈现在用C/x/xAML应用程序创建的画布上。 好消息是你不允许人们编辑(RichTextEdit),它只是查看(RichTextBlock),所以你不必担心自动更正、Url检测等问题


    <> > >编辑< /St>:最初我提到了WrRTC++,但我的意思是C++。WinRT也可以使用它,但我还没有尝试过。

    我认为你做不到。您是否尝试过使用
    ?文本选择只能选择当前文本控件内的内容,不能跨控件选择文本。如果你想达到这个效果,你需要把所有的段落放在一个richTextBlock中。您可以尝试在Windows.UI.Xaml.Documents名称空间下用文本类填充RichTextBlock(例如Run、段落等)。@Muzib我曾经这样做过。唯一的问题是,每列中的段落最终会处于不同的高度,而不是齐平。我想我必须测量每个段落的高度并使它们相等。@Faywang MSFT不幸的是,“不能将'ItemsRepeater'类型的值添加到'BlockCollection'类型的集合或字典中。”整个事情令人沮丧,因为UWP忽略了派生
    运行
    跨度
    换行符
    ,或者可以从
    框架元素
    进入
    文本块
    RichTextBlock
    内部的任何其他相关元素,这意味着无法找到
    实际高度
    ,也无法设置
    高度。但是,无法根据需要选择多个
    TextBlock
    s或
    RichTextBlock
    s。在RT中构建控件并在应用程序中呈现控件的文档在哪里?您可以看到如何创建C++/WinRT控件。