Rendere il testo cliccabile in Silverlight

Inserire testo cliccabile, o collegamenti ipertestuali, nel testo principale è facile se si utilizza un software progettato per creare applicazioni Web. Tuttavia, in Microsoft Silverlight, rendere il testo selezionabile è più difficile perché offre solo una classe “pulsante collegamento ipertestuale”. Questa classe crea un pulsante che non può essere inserito all’interno di blocchi di testo. Per aggirare la restrizione, è necessario creare un nuovo controllo, con un proprio metodo e proprietà per gestire il testo e inserire i collegamenti ipertestuali.

1

Avvia Visual Studio e crea o apri un progetto Silverlight.

2

Creare un controllo ereditato dal controllo WrapPanel standard, utilizzando il codice seguente:

classe pubblica LinkTextBlock: WrapPanel {}

3

Crea una proprietà in grado di gestire il testo, all’interno del controllo appena creato. Usa questo codice per crearlo:

public static DependencyProperty TextProperty; statico LinkTextBlock () {TextProperty = DependencyProperty.Register (“Text”, typeof (string), typeof (LinkTextBlock), new PropertyMetadata (String.Empty, TextChangedCallback)); } void statico privato TextChangedCallback (DependencyObject d, DependencyPropertyChangedEventArgs e) {var control = (LinkTextBlock) d; control.BuildControls (); } testo stringa pubblica {get {return (string) GetValue (TextProperty); } set {SetValue (TextProperty, value); }}

Il controllo risultante ha questo aspetto:

public class LinkTextBlock: WrapPanel {public static DependencyProperty TextProperty; statico LinkTextBlock () {TextProperty = DependencyProperty.Register (“Text”, typeof (string), typeof (LinkTextBlock), new PropertyMetadata (String.Empty, TextChangedCallback)); } void statico privato TextChangedCallback (DependencyObject d, DependencyPropertyChangedEventArgs e) {var control = (LinkTextBlock) d; control.BuildControls (); } testo stringa pubblica {get {return (string) GetValue (TextProperty); } set {SetValue (TextProperty, value); }}}

4

Crea un nuovo metodo per dividere il testo in parole. Il metodo deve essere chiamato ogni volta che il testo viene aggiornato. Usa questo codice per creare il metodo:

private void BuildControls () {Children.Clear (); foreach (UIElement control in from word in Text.Split (”) select BuildWordControl (word)) {Children.Add (control); }}

5

Costruisci il controllo per ogni parola restituita dal metodo “BuildControls” utilizzando questo codice:

UIElement privato BuildWordControl (stringa di testo) {UIElement risultato; URL stringa, displayText; if ((CheckLinkMethod! = null) && (CheckLinkMethod (text, out url, out displayText) == true)) {Uri navigateUri = new Uri (www.yourwebsite.com/resource); risultato = nuovo HyperlinkButton () {Content = displayText, Tag = url, NavigateUri = navigateUri}; ((HyperlinkButton) risultato). Fare clic su + = delegate (object sender, RoutedEventArgs e) {}; } altro {risultato = new TextBlock () {Text = text}; } risultato di ritorno; }

Sostituisci “www.yourwebsite.com/resource” con il collegamento alla pagina Web di destinazione.