Нет никакого способа действительно сделать это в Python. Скорее unpythonic, это.
, Поскольку Guido сказал бы, мы все соглашаемся взрослые здесь.
Вот польза сводка философии позади всего в Python быть общедоступным .
Коллекцию 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 как элемент, который необходимо объединить вместе. Если вы используете мой подход, основанный на выполнении, упаковка должна быть унаследована от содержащего текстового блока.
Я не знаю о 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, но удалил две строки, которые делали его интерактивным. Это придаст цвет тексту, но не будет кликабельным. Хотя он все еще заставляет курсор изменяться. Хотя я уверен, что есть свойство это изменить.