我正在开发一个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);
}
在对这种行为进行了相当长的一段时间的调查之后(并使用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。离开指针后,一切都被设置为原点。
不好看,但可能行得通