在一个可选择的RichTextBlock中改变光标在悬停的内联内容上

本文关键字:光标 悬停 改变 RichTextBlock 可选择 一个 | 更新日期: 2023-09-27 18:03:29

我正在开发一个UWP应用程序,但是我有点卡住了。

我试图显示一个不同的光标图标时,悬停在InlineUIContainer内的Image,但我只是不能让它工作,因为RichTextBlock改变光标到标准的"文本光标",当我悬停它。

I 可以解决这个问题(在某种程度上),如果我将属性IsTextSelectionEnabled设置为False,则使用此代码更改光标图标但是因为我需要RichTextBox的内容是可选的,所以我不能这样做。

我有点想知道是否有一些方法可以通过禁用IsTextSelectionEnabled和处理/捕获自己的选择事件来解决这个问题,但我不知道我会怎么做这样的事情,因为我有点新的RichTextBlock控件。

<RichTextBlock x:Name="richTextBlock">
    <Paragraph>
        <Span>Hellu</Span>
    </Paragraph>
    <Paragraph>
        <InlineUIContainer>
            <Image
                Source="{ Binding url }"
                Stretch="Uniform"
                PointerEntered="Image_PointerEntered"
                PointerExited="Image_PointerExited" />
        </InlineUIContainer>
    <Paragraph>
</RichTextBlock>

背后的代码
private void Image_PointerEntered(object sender, PointerRoutedEventArgs e)
{
    Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorType.Hand, 0);
}
private void Image_PointerExited(object sender, PointerRoutedEventArgs e)
{
    Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorType.Arrow, 0);
}

在一个可选择的RichTextBlock中改变光标在悬停的内联内容上

在对这种行为进行了相当长的一段时间的调查之后(并使用Interaction.Behavior来执行一些仅用于xhtml的触发器),似乎没有直接的解决方案。

唯一接近解决方案的东西是这样的:

private TextPointer _start, _end;
        private void Image_PointerEntered(object sender, PointerRoutedEventArgs e) {
            this._start = this.richTextBlock.SelectionStart;
            this._end = this.richTextBlock.SelectionEnd;
            this.richTextBlock.IsTextSelectionEnabled = false;
            Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorType.Hand, 1);
        }
        private void Image_PointerExited(object sender, PointerRoutedEventArgs e) {
            this.richTextBlock.IsTextSelectionEnabled = true;
            this.richTextBlock.Select(this._start, this._end);
            Window.Current.CoreWindow.PointerCursor = new CoreCursor(CoreCursorType.Arrow, 1);
        }

当指针进入时,保存当前选择,并将IsTextSelectionEnabled设置为false。离开指针后,一切都被设置为原点。

不好看,但可能行得通