2011-04-18 17 views
7

अरे, जब मैं एक WPF हाइपरलिंक में क्लिक करता हूं तो मैं एक नया WPF फॉर्म खोलना चाहता हूं। मैं उसे कैसे कर सकता हूँ। मैंने कई उदाहरण देखे जो केवल वेब यूआरएल खोलते हैं, लेकिन मैं एक नया WPF फॉर्म खोलना चाहता हूं।WPF हाइपरलिंक पर क्लिक करते समय ओपन डब्ल्यूपीएफ फॉर्म

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

तुम भी XAML के साथ पागल जा सकते हैं:

उत्तर

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

तुम बस क्लिक करें घटना को संभाल सकता

<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> 

हालांकि यह एक बार के बाद से बहुत समस्याग्रस्त है संवाद बंद है इसे फिर से खोल नहीं किया जा सकता है, इसका मतलब है कि जब आप हाइपेलिन पर क्लिक करते हैं के फिर से एक अपवाद फेंक दिया जाएगा।


का उपयोग अन्तरक्रियाशीलता आप इस तरह की समस्याओं के बिना यह कर सकता है (मिश्रण एसडीके के लिए एक संदर्भ की जरूरत है, हालांकि):

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> 

codebehind:

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

है?

0

और का उपयोग कर MVVM आप अपने ViewModel

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

private void ExecuteHyperlink() { 
    //do stuff here 
} 
अपने दृश्य

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

में और में क्या कर सकते हैं

संबंधित मुद्दे