2016-08-21 1 views
1

Je suis en train de développer une application UWP, mais je me suis coincé. J'essaye d'afficher une icône de curseur différente lorsque je place le Image à l'intérieur du InlineUIContainer mais je n'arrive simplement pas à le faire fonctionner puisque le RichTextBlock change le curseur en "curseur de texte" standard lorsque je le survole.Modifier le curseur sur le contenu en ligne planant dans un RichTextBlock sélectionnable

Je peut résoudre ce (dans une certaine mesure) et changer l'icône du curseur avec ce code si je définir la propriété IsTextSelectionEnabled-False mais depuis que je besoin du contenu de la RichTextBox être sélectionnable, je ne peux pas fais ça. Je me demandais si il y avait un moyen de résoudre cela en désactivant IsTextSelectionEnabled et gérer/capturer les événements de sélection moi-même, mais je ne sais pas comment je ferais quelque chose comme ça, car je suis un peu nouveau au contrôle 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> 
code

derrière

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); 
} 

Répondre

0

Après un certain temps enquêter sur ce comportement (et jouer avec Interaction.Behavior à faire XAML seule som déclenche), il semble qu'il n'y a pas de solution simple.

La seule chose qui se rapproche d'une solution est quelque chose comme ceci:

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); 
     } 

Lorsque le pointeur entre, la sélection en cours est enregistré et la IsTextSelectionEnabled est définie sur false. Après avoir quitté le pointeur tout est réglé sur l'origine.

Pas joli mais cela pourrait fonctionner