在可选择的RichTextBlock中悬停内联内容时更改光标

时间:2016-08-21 14:23:52

标签: c# xaml win-universal-app richtextbox

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

我在Image内悬停InlineUIContainer时尝试显示不同的光标图标,但由于RichTextBlock将光标更改为标准&#我无法使其工作34;文本光标"当我把它悬停时。

可以解决此问题(在某种程度上)并使用此代码更改光标图标如果我将属性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);
}

1 个答案:

答案 0 :(得分:0)

经过一段时间调查这种行为(并使用Interaction.Behavior玩som XAML-only触发器),似乎没有直接的解决方案。

唯一接近解决方案的是这样的事情:

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。离开指针后,所有内容都设置为原点。

不漂亮但可能有效