在WPF RTB中通过超链接手形光标?

时间:2014-05-02 14:04:21

标签: c# wpf hyperlink richtextbox

我有一个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。 感谢

1 个答案:

答案 0 :(得分:0)

通过将事件更改为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()); 
        }         
    }

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