Open WPF form when clicking WPF hyperlink Open WPF form when clicking WPF hyperlink wpf wpf

Open WPF form when clicking WPF hyperlink


You can achive this like this:

<Label Height="25" Margin="26,27,116,0" Name="label1" VerticalAlignment="Top">    <Hyperlink Click="Hyperlink_Click">Click Me</Hyperlink></Label>

and handle it like this:

private void Hyperlink_Click(object sender, RoutedEventArgs e){    Window2 form2 = new Window2();    form2.Show();}


You could just handle the click event:

<Hyperlink Click="Hyperlink_Click">Link</Hyperlink>
private void Hyperlink_Click(object sender, RoutedEventArgs e){    Dialogue diag = new Dialogue();    diag.Show();}

You could also go crazy with XAML:

<Hyperlink>    <Hyperlink.Style>        <Style TargetType="{x:Type Hyperlink}">            <Style.Triggers>                <EventTrigger RoutedEvent="Hyperlink.Click">                    <BeginStoryboard>                        <Storyboard>                            <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Visibility">                                <Storyboard.Target>                                    <local:Dialogue />                                </Storyboard.Target>                                <DiscreteObjectKeyFrame KeyTime="0:0:0" Value="{x:Static Visibility.Visible}"/>                            </ObjectAnimationUsingKeyFrames>                        </Storyboard>                    </BeginStoryboard>                </EventTrigger>            </Style.Triggers>        </Style>    </Hyperlink.Style>    <Hyperlink.Inlines>        <Run Text="Open Dialogue"/>    </Hyperlink.Inlines></Hyperlink>

This however is very problematic since once the dialogue is closed it cannot be reopened, that means when you click the hypelink again an exception will be thrown.


Using interactivity you could do this without such problems (needs a reference to the Blend SDK though):

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
<Hyperlink>    <i:Interaction.Triggers>        <i:EventTrigger EventName="Click">            <t:CreateDialogAction Type="{x:Type local:Dialogue}"/>        </i:EventTrigger>    </i:Interaction.Triggers>    <Hyperlink.Inlines>        <Run Text="Open Dialogue"/>    </Hyperlink.Inlines></Hyperlink>

The action for this:

public class CreateDialogAction : TriggerAction<Hyperlink>{    public Type Type { get; set; }    protected override void Invoke(object parameter)    {        if (Type != null && Type.IsSubclassOf(typeof(Window)) && Type.GetConstructor(Type.EmptyTypes) != null)        {            Window window = Type.GetConstructor(Type.EmptyTypes).Invoke(null) as Window;            window.Show();        }    }}


XAML :

<TextBlock Height="23" HorizontalAlignment="Left" Margin="254,130,0,0" Name="textBlock1" VerticalAlignment="Top">        <Hyperlink Click="Hyperlink_Click">Clique Aqui</Hyperlink>        </TextBlock>

CodeBehind :

private void Hyperlink_Click(object sender, RoutedEventArgs e)        {            MainWindow m = new MainWindow();            m.Show();        }

this?