2009-10-27 4 views
1

Le contenu du bloc de texte est importé à partir d'un service Web, mais il existe une URL.Comment faire pour que l'URL dans le bloc de texte soit cliquable?

Est-il possible d'en faire un lien?

Merci.

+2

Avez-vous regardé cette question? http://stackoverflow.com/questions/861409/wpf-making-hyperlinks-clickable Il semble atteindre ce dont vous avez besoin. –

Répondre

0

Vous pourriez faire quelque chose comme: Cependant, cela utilise une étiquette et non un bloc de texte.

Dans votre XAML vous effectuez les opérations suivantes:

<dataInput:Label Grid.Row="2"> 
       <ContentPresenter> 
        <StackPanel Orientation="Horizontal"> 
         <TextBlock Text="Hello world"/> 
         <HyperlinkButton x:Name="Test" NavigateUri="{Binding Path=URI}" Content="This is a url"/> 
        </StackPanel> 
       </ContentPresenter> 
      </dataInput:Label> 

et dans votre code derrière vous ajoutez la propriété de dépendance suivante et définissez la datacontext sur la page elle-même

public static readonly DependencyProperty URLProperty = 
      DependencyProperty.Register("URI", typeof(Uri), typeof(MainPage), null); 

     public Uri URI { get 
      { 
       return (Uri)GetValue(URLProperty); 
      } 
      set 
      { SetValue(URLProperty, value); } 
     } 

Ce code définit la dépendance propriété pour la liaison à l'URL;

public MainPage() 
     { 
      InitializeComponent(); 
      URI = new Uri("/Home", UriKind.Relative); 
      DataContext = this; 
     } 

Ce code crée un nouvel URI et le lie à la variable. Il définit également le contexte de données sur la page elle-même.

3

Sonne comme vous voulez a LinkLabel control. J'ai utilisé ce contrôle avec quelques modifications dans mon Silverlight Twitter Badge pour mélanger le texte et les liens qui apparaissent dans les tweets.

Si vous avez juste un TextBlock avec un lien seulement et que vous voulez qu'il soit cliquable, vous devez juste définir le curseur comme une main et ajouter un gestionnaire d'événement pour l'événement MouseLeftButtonDown qui accèderait à la valeur de TextBox.

Xaml:

<TextBlock Text="http://www.microsoft.com" Cursor="Hand" TextDecorations="Underline" MouseLeftButtonDown="TextBlock_MouseLeftButtonDown" /> 

code:

private void TextBlock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
    var txt = ((TextBlock)sender).Text; 
    System.Windows.Browser.HtmlPage.Window.Navigate(new Uri(txt, UriKind.Absolute)); 
} 
Questions connexes