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.