Вложенный TextBlocks и Гиперссылки, Как Вы копируете этот XAML в C#?

Нет никакого способа действительно сделать это в Python. Скорее unpythonic, это.

, Поскольку Guido сказал бы, мы все соглашаемся взрослые здесь.

Вот польза сводка философии позади всего в Python быть общедоступным .

5
задан Dave Clemmer 19 August 2011 в 05:06
поделиться

2 ответа

Коллекцию Inlines можно изменить с помощью свойства Inlines TextBlock . Приведенный выше образец XAML будет выглядеть примерно так:

TextBlock tb = new TextBlock
               {
                  Text = "This is some Green text up front.",
                  Foreground = Brushes.Green
               };

InlineCollection tbInlines = tb.Inlines;

tbInlines.Add(new Run
              {
                 Text = "This is some Blue text.",
                 TextWrapping = TextWrapping.Wrap,
                 Foreground = Brushes.Blue
              });

tbInlines.Add(new Run
              {
                 Text = "This is some Green text following the Blue text."
              });

Run hyperlinkRun = new Run("And finally, this is a Hyperlink.");

tbInlines.Add(new Hyperlink(hyperlinkRun));

Что касается ваших связанных вопросов:

1A) Хотя можно подключить обработчик событий к каждому отдельному экземпляру гиперссылки, используя событие RequestNavigate в классе, это может быть установка и использование большего объема памяти, чем необходимо. Вместо этого я рекомендую использовать перенаправленные события и просто подключить событие RequestNavigate к контейнеру, в котором будут находиться все ваши гиперссылки. Вы можете сделать это следующим образом:

myContainer.AddHandler(
                     Hyperlink.RequestNavigateEvent, 
                     new RequestNavigateEventHandler(
                                                      (sender, args) =>
                                                      {
                                                        /* sender is the instance of the Hyperlink that was clicked here */
                                                      }));

2A) В вашем примере XAML он обрабатывает внутренний TextBlock как элемент, который необходимо объединить вместе. Если вы используете мой подход, основанный на выполнении, упаковка должна быть унаследована от содержащего текстового блока.

7
ответ дан 14 December 2019 в 04:42
поделиться

Я не знаю о TextBlocks, но вот как это сделать в RichTextBox. Вы можете использовать RichTextBox вместо TextBlock.

 RichTextBox rtbTest = new RichTextBox();
 rtbTest.IsDocumentEnabled = true;

 FlowDocument fd = new FlowDocument();
 Paragraph para = new Paragraph();

 Run r4 = new Run("Some Text To Show As Hyperlink");
 Hyperlink h4 = new Hyperlink(r4);
 h4.Foreground = Brushes.Red; //whatever color you want the HyperLink to be

 // If you want the Hyperlink clickable
 h4.NavigateUri = new Uri("Some URL");
 h4.RequestNavigate += new RequestNavigateEventHandler(h_RequestNavigate);
 // Leaving the two previous lines out will still make the Hyperlink, but it won't be clickable

 // use this if you don't want an underline under the HyperLink
 h4.TextDecorations = null;

 para.Inlines.Add(h4);

 fd.Blocks.Add(para);

 rtbTest.Document = fd;

Для обычного текста я просто использовал HyperLink, но удалил две строки, которые делали его интерактивным. Это придаст цвет тексту, но не будет кликабельным. Хотя он все еще заставляет курсор изменяться. Хотя я уверен, что есть свойство это изменить.

1
ответ дан 14 December 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: