2011-04-18 60 views
7

嘿,我想打開一個新的WPF表單,當我點擊一個WPF超鏈接。我怎樣才能做到這一點。我見過很多隻能打開網址的例子,但我想打開一個新的WPF表單。點擊WPF超鏈接打開WPF表格

回答

15

你可以這樣做:

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

和處理這樣的:

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

你可以只處理click事件:

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

你也可以去瘋狂與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> 

然而,這是非常有問題的,因爲一旦對話已關閉,無法重新打開,這意味着當您單擊hypelin時k再次拋出異常。


使用的交互性,你可以做到這一點沒有這樣的問題(需要對混合SDK的引用雖然):

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> 

這樣做的動作:

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(); 
     } 
    } 
} 
1

XAML:

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

代碼隱藏:

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

呢?

0

而且使用MVVM,你可以在你的瀏覽

<Hyperlink NavigateUri="{Binding MyUri}" 
      Command="{Binding OpenHyperlinkCommand}">Link text 
</Hyperlink> 

,並在您的視圖模型

private ICommand _openHyperlinkCommand; 
public ICommand OpenHyperlinkCommand { 
    get 
    { 
     if (_openHyperlinkCommand == null) 
      _openHyperlinkCommand = new RelayCommand<object>(p => ExecuteHyperlink()); 
     return _openHyperlinkCommand; 
    } 
} 

private void ExecuteHyperlink() { 
    //do stuff here 
}