Осъществяване на текстово кликване в Silverlight
Вмъкването на текст с възможност за кликване или хипервръзки в основния текст е лесно, ако използвате софтуер, създаден за създаване на уеб приложения. Въпреки това, в Microsoft Silverlight, създаването на текст с възможност за кликване е по-трудно, защото предлага само клас "хипервръзка". Този клас създава бутон, който не може да бъде вмъкнат в текстови блокове. За да заобиколите ограничението, трябва да създадете нов контрол, със свой собствен метод и свойство, за да обработвате текста и да вмъквате хипервръзки.
1.
Стартирайте Visual Studio и създайте или отворете проект Silverlight.
2.
Създайте контрола, наследена от стандартния контрол на WrapPanel, като използвате следния код:
public class LinkTextBlock: WrapPanel {}
3.
Създайте свойство, което може да обработва текста в новосъздадения контрол. Използвайте този код, за да го създадете:
публична статична текстура на завещанието DependencyProperty; статичен LinkTextBlock () {TextProperty = DependencyProperty.Register ("Текст", typeof (string), typeof (LinkTextBlock), нов PropertyMetadata (String.Empty, TextChangedCallback)); } лична статична void TextChangedCallback (DependencyObject d, DependencyPropertyChangedEventArgs e) {var control = (LinkTextBlock) d; control.BuildControls (); } public string Текст {get {return (string) GetValue (TextProperty); } set {SetValue (TextProperty, value); }}
Полученият контрол изглежда така:
public class LinkTextBlock: WrapPanel {публично статично DependencyProperty TextProperty; статичен LinkTextBlock () {TextProperty = DependencyProperty.Register ("Текст", typeof (string), typeof (LinkTextBlock), нов PropertyMetadata (String.Empty, TextChangedCallback)); } лична статична void TextChangedCallback (DependencyObject d, DependencyPropertyChangedEventArgs e) {var control = (LinkTextBlock) d; control.BuildControls (); } public string Текст {get {return (string) GetValue (TextProperty); } set {SetValue (TextProperty, value); }}}
4.
Създайте нов метод за разделяне на текста на думи. Методът трябва да се извиква при всяко обновяване на текста. Използвайте този код, за да създадете метода:
частни void BuildControls () {Children.Clear (); foreach (UIElement контрол от от дума в Text.Split ('') изберете BuildWordControl (word)) {Children.Add (control); }}
5.
Създайте контрола за всяка дума, върната от метода "BuildControls", като използвате този код:
частно UIElement BuildWordControl (низ текст) {резултат от UIElement; url url, displayText; if ((CheckLinkMethod! = null) && (CheckLinkMethod (текст, изходящ URL адрес, изходящ текст) == вярно)) {Uri navigateUri = new Uri (www.yourwebsite.com/resource); result = new HyperlinkButton () {Content = displayText, Tag = url, NavigateUri = navigateUri}; ((HyperlinkButton) резултата) .Click + = delegate (object sender, RoutedEventArgs e) {}; } else {result = new TextBlock () {Текст = текст}; } резултат от връщане; }
Заменете "www.yourwebsite.com/resource" с връзката към целевата уеб страница.