programmatically make textblock with hyperlink in between text
17,272
Here's the code to add a TextBlock
with a clickable link in the middle :
Run run1 = new Run("click ");
Run run2 = new Run(" Please");
Run run3 = new Run("here.");
Hyperlink hyperlink = new Hyperlink(run3)
{
NavigateUri = new Uri("http://stackoverflow.com")
};
hyperlink.RequestNavigate += new System.Windows.Navigation.RequestNavigateEventHandler(hyperlink_RequestNavigate); //to be implemented
textBlock1.Inlines.Clear();
textBlock1.Inlines.Add(run1);
textBlock1.Inlines.Add(hyperlink);
textBlock1.Inlines.Add(run2);
Comments
-
mtijn almost 2 years
In XAML I have the following code:
<Label Width="120" Height="20" Name="label1" SnapsToDevicePixels="True" HorizontalAlignment="Left" VerticalAlignment="Bottom"> <TextBlock VerticalAlignment="Center" HorizontalAlignment="Left"> click <Hyperlink RequestNavigate="Hyperlink_RequestNavigate" NavigateUri="foo">here</Hyperlink> please </TextBlock> </Label>
Now I'd like to get rid of the whole TextBlock XAML and add that bit programmatically. I have no trouble creating the TextBlock, setting the Text property to 'click please' and adding a Hyperlink to
TextBlock.Content
. But how do I position the Hyperlink in between 'click' and 'please'? And how do I set the text of the hyperlink to 'here'?I haven't got much going, so far all I got is this:
label2.Content = new TextBlock() { Text = "click please" }; //(label2.Content as TextBlock).Content does not exist? //and even if it does.. how do I squeeze the hyperlink in between the text?
-
mtijn over 12 yearsalmost, but this concatenates all the inlines, spacing is not preserved
-
shraysalvi over 12 years@mtijn I added a space after click and before Please. It should work as expected now
-
mtijn over 12 yearsI'm still left wondering though.. how come the XAML code inserted spaces automatically whereas programmatically you have to be specific?? should I raise this as a separate question?
-
Jordan Morris about 11 yearsYou should raise the question as to whether you should raise this as a separate question as a separate question.