programmatically make textblock with hyperlink in between text
Asked Answered
A

1

12

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?
Adjective answered 25/10, 2011 at 13:40 Comment(2)
do you have any code you've tried already to work with?Sfumato
I added what I have but it's not much..Adjective
C
22

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);
Chiaki answered 25/10, 2011 at 13:49 Comment(4)
almost, but this concatenates all the inlines, spacing is not preservedAdjective
@Adjective I added a space after click and before Please. It should work as expected nowChiaki
I'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?Adjective
You should raise the question as to whether you should raise this as a separate question as a separate question.Diehl

© 2022 - 2024 — McMap. All rights reserved.