将光标放在WPF RichTextBox中的超链接上

本文关键字:超链接 RichTextBox WPF 光标 | 更新日期: 2023-09-27 18:01:34

我有一个RTB,并希望将鼠标光标更改为超链接上的MouseEnter上的手。这似乎是默认的按下Ctrl键。我希望它只是当用户悬停在超链接上,而不管Ctrl是否按下。

当前从MouseLeftButtonDown事件触发到web浏览器的超链接工作得很好:

   <RichTextBox.Resources>                               
        <Style TargetType="Hyperlink">
           <Setter Property="TextDecorations" Value="Underline"/>
           <Setter Property="Foreground" Value="Black"/>
           <Setter Property="Cursor" Value="Hand"/>
           <EventSetter Event="MouseLeftButtonDown" Handler="Hyperlink_MouseLeftButtonDown" />                                                         
          </Style>                                                            
     </RichTextBox.Resources>

背后的代码:

  private void Hyperlink_MouseLeftButtonDown(object sender, System.Windows.Input.MouseEventArgs e)
  {          
     var hyperlink = (Hyperlink)sender;
     Process.Start(hyperlink.NavigateUri.ToString());                                         
  }

事件按预期触发,这只是我想在MouseEnter上的手光标。我可以在同一个Style TargetType='Hyperlink'>上有两个独立的事件吗?

p。s RTB格式设置为Rtf。由于

将光标放在WPF RichTextBox中的超链接上

通过将事件更改为PreviewLeftMoseButtonDown来解决此问题:

  <RichTextBox.Resources>                               
     <Style TargetType="Hyperlink">
       <EventSetter Event="PreviewMouseLeftButtonDown" Handler="Hyperlink_PreviewMouseLeftButtonDown" />                                   
      </Style>                                                            
  </RichTextBox.Resources>

背后的代码:

    private void Hyperlink_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        if (Keyboard.IsKeyDown(Key.LeftCtrl))
        {
            var hyperlink = (Hyperlink)sender;
            Process.Start(hyperlink.NavigateUri.ToString()); 
        }         
    }

这将导致光标变为hand按Ctrl下,web浏览器触发点击鼠标按钮上的链接。我正在使用WPF .NET4.5中的扩展WPF工具箱RTB;使用RTB格式化到Rtf的结果可能与其他工具不同。