2012-04-11 7 views
0

Ich habe eine Liste von Sharepoint und ich sammle von dieser Liste einen Hyperlink. Da ich möchte, dass meine Textbox wie ein Hyperlink ist, habe ich ein Ereignis auf mousedown hinzugefügt, um diesen Hyperlink zu öffnen. Meine Sorge ist, wie man diesen Hyperlink im Codebehind mit dem Absender sammelt. Für den Moment habe ich nur diesen Hyperlink in der QuickInfo verstecken, vielleicht kann ich das anders verwalten jeder Vorschlag wird sehr geschätzt werden. Mein Punkt so weit, ich weiß nicht, wie man diesen Tooltip in den Code hinter sich bringt. DankTextBlock MouseDown URL - Wie bekomme ich meine URL in meinem Code zurück?

Meine XAML-Code:

<ListBox Name="ListboxTips" ItemsSource="{Binding}" ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <Grid> 
        <StackPanel Orientation="Horizontal"> 

         <Image Source="{Binding Path=Picture}" Height="20"></Image> 
         <TextBlock MouseDown="TextBlock_MouseDown_URL" TextDecorations="Underline" 
            Margin="10,10,20,10" Width="160" TextWrapping="Wrap" 
            Text="{Binding Path=TitleTip}" 
            ToolTip="{Binding Path=URL}"/> 
        </StackPanel> 

       </Grid> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 

Mein Code hinter:

  foreach (SPSClient.ListItem item in TipsList) 
      { 

       var tips = new Tips(); 
       tips.TitleTip = item.FieldValues.Values.ElementAt(1).ToString(); 
       tips.App = item.FieldValues.Values.ElementAt(4).ToString(); 

       // get the Hyperlink field URL value 
       tips.URL = ((FieldUrlValue)(item["LinkDoc"])).Url.ToString(); 

       //should collect the description of the url 
       //tips.URLdesc = ((FieldUrlValue)(item["LinkDoc"])).Description.ToString(); 
       tips.Picture = item.FieldValues.Values.ElementAt(4).ToString(); 

       colTips.Add(tips); 
      } 
      ListboxTips.DataContext = colTips; 

....

private void TextBlock_MouseDown_URL(object sender, System.Windows.Input.MouseButtonEventArgs e) 
    { 
     //string test = (ToolTip)(sender as Control).ToString(); 
     System.Diagnostics.Process.Start("http://www.link.com"); 
     //System.Diagnostics.Process.Start(test); 
    } 

Vielen Dank,

Antwort

0

Sie können nur Zugriff auf die Eigenschaft y direkt. Es ist nicht elegant, aber wird funktionieren!

private void TextBlock_MouseDown_URL(object sender, MouseButtonEventArgs e) 
{ 
    TextBlock txtBlock = sender as TexBlock; 
    // just access the property 
    string url = txtBlock.ToolTip as string; 
} 

Ein eleganter Ansatz könnte eine Button, Hyperlink oder etwas zu verwenden, die eine Command aussetzt, so dass Sie den ‚Klick‘ Aktion auf einen Befehl auf Ihrem View-Modell binden kann, der die Aktion durchführt möchten ausführen.

0

In der Regel kleben Sie alle Daten, die Sie irgendwo zu Tag-Attribut übertreten möchten.

<TextBlock .. Tag="{Binding Path=URL}" /> 

Dies ist als öffentliches Eigentum leicht abrufbaren:

private void TextBlock_MouseDown_URL(object sender, System.Windows.Input.MouseButtonEventArgs e) 
{ 
    var tb = sender as TextBlock; 
    if(tb != null) 
    { 
     var neededUrl = tb.Tag; 
    } 
}