none
STE RRS feed

  • Вопрос

  • Может кто-нибудь сталкивался с Silverlight Text Editor (http://msdn.microsoft.com/en-us/library/ff426926%28v=vs.95%29.aspx)

    Интересует вопрос насчет вставки гиперссылкы. Она то вставляется, но только как текст, по нее нельзя перейти(

    Что делать?

    21 августа 2011 г. 7:05

Ответы

  • Hyperlink в RichTextBox срабатывает только, если RichTextBox.IsReadOnly="True".
    перехватить MouseLeftButtonDown при IsReadOnly="True" можно только в наследнике, переопределив метод OnMouseLeftButtonDown, в котором надо найти Hyperlink и выполнить переход.
    using System;
    using System.Windows;
    using System.Windows.Browser;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    
    namespace SilverlightApplication4
    {
     public class MyRichTextBox : RichTextBox
     {
     protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
     {
      base.OnMouseLeftButtonDown(e);
      if (Keyboard.Modifiers != ModifierKeys.Control)
      return;
    
      Action a = () =>
      {
      var p = this.Selection.Start.Parent as Inline;
      if (p != null)
      {
       var h = p.ElementStart.Parent as Hyperlink;
       if (h != null)
       {
       var url = h.NavigateUri;
       System.Diagnostics.Debug.WriteLine(url);
       HtmlPage.Window.Eval("document.location.href='" + url + "';");
       }
      }
      };
      Dispatcher.BeginInvoke(a);
     }
     }
    }
    

    <UserControl x:Class="SilverlightApplication4.MainPage"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
     mc:Ignorable="d"
     xmlns:uc="clr-namespace:SilverlightApplication4" >
     <StackPanel x:Name="LayoutRoot">
     <uc:MyRichTextBox x:Name="rtb" IsReadOnly="False" Width="500" Height="500" MouseLeftButtonDown="rtb_MouseLeftButtonDown">
      <Paragraph>
      <Hyperlink NavigateUri="http://social.msdn.microsoft.com/Forums/ru-RU/">link</Hyperlink>
      </Paragraph>
     </uc:MyRichTextBox>
     </StackPanel>
    </UserControl>
    
    


    • Предложено в качестве ответа Malobukv 21 августа 2011 г. 17:25
    • Помечено в качестве ответа Letos07 22 августа 2011 г. 4:46
    21 августа 2011 г. 17:24

Все ответы

  • значение для NavigateUri указывали?

    21 августа 2011 г. 8:58
  • указывал.

    вот код с редактора:

     private void btnHyperlink_Click(object sender, RoutedEventArgs e)
            {
                InsertURL cw = new InsertURL(rtb.Selection.Text);
                cw.HasCloseButton = false;
               
                //Hook up an event handler to the Closed event on the ChildWindows cw.
                cw.Closed += (s, args) =>
                {
                    if (cw.DialogResult.Value)
                    {
                        Hyperlink hyperlink = new Hyperlink();
                        hyperlink.TargetName = "_blank";
                        hyperlink.NavigateUri = new Uri(cw.txtURL.Text);
                        if (cw.txtURLDesc.Text.Length > 0)
                            hyperlink.Inlines.Add(cw.txtURLDesc.Text);
                        else
                            hyperlink.Inlines.Add(cw.txtURL.Text);

                        rtb.Selection.Insert(hyperlink);
                        ReturnFocus();
                    }
                };
                cw.Show();
            }

     

    21 августа 2011 г. 16:36
  • Hyperlink в RichTextBox срабатывает только, если RichTextBox.IsReadOnly="True".
    перехватить MouseLeftButtonDown при IsReadOnly="True" можно только в наследнике, переопределив метод OnMouseLeftButtonDown, в котором надо найти Hyperlink и выполнить переход.
    using System;
    using System.Windows;
    using System.Windows.Browser;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    
    namespace SilverlightApplication4
    {
     public class MyRichTextBox : RichTextBox
     {
     protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
     {
      base.OnMouseLeftButtonDown(e);
      if (Keyboard.Modifiers != ModifierKeys.Control)
      return;
    
      Action a = () =>
      {
      var p = this.Selection.Start.Parent as Inline;
      if (p != null)
      {
       var h = p.ElementStart.Parent as Hyperlink;
       if (h != null)
       {
       var url = h.NavigateUri;
       System.Diagnostics.Debug.WriteLine(url);
       HtmlPage.Window.Eval("document.location.href='" + url + "';");
       }
      }
      };
      Dispatcher.BeginInvoke(a);
     }
     }
    }
    

    <UserControl x:Class="SilverlightApplication4.MainPage"
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
     mc:Ignorable="d"
     xmlns:uc="clr-namespace:SilverlightApplication4" >
     <StackPanel x:Name="LayoutRoot">
     <uc:MyRichTextBox x:Name="rtb" IsReadOnly="False" Width="500" Height="500" MouseLeftButtonDown="rtb_MouseLeftButtonDown">
      <Paragraph>
      <Hyperlink NavigateUri="http://social.msdn.microsoft.com/Forums/ru-RU/">link</Hyperlink>
      </Paragraph>
     </uc:MyRichTextBox>
     </StackPanel>
    </UserControl>
    
    


    • Предложено в качестве ответа Malobukv 21 августа 2011 г. 17:25
    • Помечено в качестве ответа Letos07 22 августа 2011 г. 4:46
    21 августа 2011 г. 17:24