C# Combobox Item Mouse Hover

xlShortylx

Cadet 4th Year
Registriert
Sep. 2012
Beiträge
103
Hallo.

Ich habe eine Combobox mit mehreren Spalten pro Item (per Template) und die letzte Spalte ist ein Hyperlink.
Jetzt will ich aber, dass man genau zu dem Hyperlink den man anklickt auch den hinterlegten Link öffnen kann.
Nur weiß ich nicht wie ich das Element auslesen kann wo sich der Mauszeigen darüber befindet.

Kann mir einer weiterhelfen?

Grüße
 
Da gibt es mehrere Möglichkeiten.

Die einfachste ist vermutlich, bei jedem Hyperlink einen Click-Eventhandler zu registrieren, der dann den jeweiligen Link im Standardbrowser öffnet. Das erfordert nur einen kleinen Zusatz im XAML-Code und eine drei oder vierzeilige Eventhandler-Methode im CodeBehind des Windows.

Der Weg, den du gehen willst, viel komplizierter, da man sich durch die Hierarchie der Fensterelemente hangeln muss.
 
Danke für deine Antwort,
den Hyperlink hatte ich bereits im XAML-Code.
Und auch den Event-Handler hatte ich drinnen.

Nur weiß ich nicht wie ich genau diesen angeklickten Link raushole.

Das ist das DataTemplate für die Combobox:

Code:
<Window.Resources>
        <DataTemplate x:Key="ComboTemplate">
            <StackPanel Orientation="Horizontal">
                <Border BorderThickness="1" Width="350"  BorderBrush="Gray" Padding="0">
                    <TextBlock Text="{Binding Path=Name}"/>
                </Border>
                <Border BorderThickness="1" Width="50" BorderBrush="Gray" Padding="0">
                    <TextBlock Text="{Binding Path=Zeit}"/>
                </Border>
                <Border BorderThickness="1" Width="90" BorderBrush="Gray" Padding="0">
                    <TextBlock Text="{Binding Path=Dj}"/>
                </Border>
                <Border BorderThickness="1" Width="190" BorderBrush="Gray" Padding="0">
                    <TextBlock Text="{Binding Path=Show}"/>
                </Border>
                <Border BorderThickness="1" Width="100" BorderBrush="Gray" Padding="0">
                    <TextBlock>
                       <Hyperlink NavigateUri="{Binding Path=Link}" Click="Hyperlink_Click">Youtube-Link</Hyperlink>
                    </TextBlock>
                </Border>
            </StackPanel>
        </DataTemplate>
</Window.Resources>

Da bleibt jetzt aber die Sache mit dem hinterlegten Link, den ich ja abfragen müsste, nur wie??
 
Wenn du es bereits Event basierend machst warum greifst dann nicht auf den sender des Events zu?

Dein Event sollte ja in etwa so aussehen:

Code:
private void Hyperlink_Click(object sender, EventHandler e)
{
    //do some code...
}

und in dem den sender in einen Hyperlink casten und dann das Property NavigateUri abfragen, also etwa so:

Code:
private void Hyperlink_Click(object sender, EventHandler e)
{
    var hyperLink = (Hyperlink)sender;
    var uri = hyperlink.NavigateUri;
    var url = uri.AbsolutePath;
}

Wenn du den Link nun über das Event im Default browser öffnen möchtest musst du die Url einfach nur ein Parameter im Process Start übergeben und Windows macht den rest:

Code:
Process.Start("http://www.xxx.xx");
 
Zuletzt bearbeitet:
Danke für deine Antwort,

das Problem das ich jetzt habe ist, dass mir der Sender eine NullReference gibt ^^

Code:
private void Hyperlink_Click(object sender, RoutedEventArgs e)
        {                        
            var hyperLink = (Hyperlink)sender;
            var uri = hyperLink.NavigateUri;
            var url = uri.AbsolutePath;              // Genau hier 
            Process.Start(url);
        }
 

Anhänge

  • Unbenannt.PNG
    Unbenannt.PNG
    10 KB · Aufrufe: 105
Das Debuggen musst du schon selber übernehmen. Wir haben dein Programm nicht.
 
Zurück
Oben