2016-08-21 1 views
1

UWP 응용 프로그램을 개발하고 있지만 막혔습니다.선택 가능한 RichTextBlock에서 인버 티드 (hovering) 인라인 컨텐츠의 커서 변경

InlineUIContainer 안에 Image을 가져갈 때 다른 커서 아이콘을 표시하려하지만 커서를 놓으면 RichTextBlock이 커서를 표준 "텍스트 커서"로 변경하기 때문에 작동하지 않습니다.

내가 할 수 (어느 정도)이 문제를 해결하고 내가 False 에 재산 IsTextSelectionEnabled을 설정하지만 선택할 수하기를 RichTextBox의 내용을 필요로하기 때문에 내가 할 수없는 경우이 코드를 사용하여 커서 아이콘을 변경 그렇게.

IsTextSelectionEnabled을 비활성화하고 선택 이벤트를 직접 처리하여 해결할 수있는 방법이 있는지 궁금했지만 다소 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); 
} 

답변

0

뒤에

<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> 

코드 꽤 많은 시간이 동작을 조사 (와 솜은 XAML 전용 트리거 할 Interaction.Behavior 놀아) 후에는 더 똑바로 앞으로 해결책이없는 것 같다. 솔루션에 근접

유일한 것은이 같은 것입니다 : 포인터가 들어갈 때

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로 설정됩니다. 포인터를 떠나면 모든 것이 원점으로 설정됩니다.

예쁘지는 않지만 작동하지 않을 수도 있습니다.