【问题标题】:Change cursor on hovering inline content in a selectable RichTextBlock更改光标悬停在可选 RichTextBlock 中的内联内容
【发布时间】:2016-08-21 14:23:51
【问题描述】:

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

当我将 Image 悬停在 InlineUIContainer 内时,我试图显示不同的光标图标,但我无法让它工作,因为当我悬停时 RichTextBlock 将光标更改为标准的“文本光标”它。

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

【问题讨论】:

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


    【解决方案1】:

    在调查此行为相当长的一段时间后(并使用 Interaction.Behavior 进行一些仅 XAML 的触发器),似乎没有直接的解决方案。

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

    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。离开指针后,一切都设置为原点。

    不漂亮,但它可能会工作

    【讨论】:

      猜你喜欢
      • 2014-06-17
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      • 2013-09-19
      • 2015-09-30
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多