none
Cursor in UserControl abfragen RRS feed

  • Frage

  • Hallo!

    Ich möchte in einem UserControl den akt. Cursor eines Elementes des UserControl abfragen:

    private void lbGW_Tag_MouseEnter(object sender, MouseEventArgs e)
    {
        if (this.Cursor == Cursors.Pen) // Nur reagieren, wenn der Markiermodus aktiv ist
    

    this beinhaltet eine Referenz auf das UserControl.

    Als Ergebnis erhalte ich aber immer null!

    Wie kann ich den den akt. Cursor des Elements des UserControl (in einer Methode des UserControl) abrufen??

    Fred


    • Bearbeitet perlfred Samstag, 2. März 2013 09:26 Erweiterung Code
    Samstag, 2. März 2013 09:23

Antworten

Alle Antworten

  • Hallo, wenn ich in einem UserControl die Cursor-Eigenschaft abfrage dann erhalte ich auch null. Wenn ich dagegen dem UserControl einen bestimmten Cursor zuweise, dann bekomme ich Ihn auch von er Eigenschaft zurück geliefert.

    Abfrage:

    var v= this.Cursor;
    Im 1. Versuch null zur Debugzeit.
    Mit zuweisung des Cursors:
    <UserControl x:Class="WpfApplication90.UserControl1"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
                 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
                 mc:Ignorable="d" Cursor="IBeam"
                 d:DesignHeight="300" d:DesignWidth="300">
        <Grid><Button Click="OnClick" Height="30" Width="50"/></Grid>
    </UserControl>
    Ich erhalte IBeam als Wert für Cursor bei der Abfrage.

    Koopakiller [kuːpakɪllɐ] | Webseite | Code Beispiele | Facebook | Snippets

    Samstag, 2. März 2013 09:36
    Moderator
  • Hallo Koopakiller!

    Danke! für deine immer wieder überraschenden Lösungsvorschläge!!

    Mein Problem ist allerdings noch ein wenig anders.

    Allgemein ausgedrückt:
    Wie greife ich auf die Propertys des Objektes von dem das UserControl aufgerufen wurde, im UserControl zu?

    Zu obigen Beispiel. Ich möchte ja nicht den Cursor des UserControl setzen sondern den akt. Cursor des Objektes, das das UserControl aufruft, abfragen.

    Wenn ich eine Referenz auf den Container (Fenster) des Objektes das das UserControl aufruft, dem UserControl als Eigenschaft übergebe, kann ich den Cursor abfragen. 

    Cursor curAktMausZeiger = ((Gaestewohnung.Window1)oRef_Container).Cursor;


    Dazu muss ich aber die Referenz (oRef_Container) immer in die spezifische Klasse des aufrufenden Containers casten! Da das UserControl allgemeingültig benutzt werden soll, habe ich da ein Problem.

    Und ihr eine Lösung ;-)) ?

    Nachtrag: Der Cursor des aufrufenden Objektes wird natürlich dynamisch zur Laufzeit geändert, worauf ich im UserControl reagieren muss.

    • Bearbeitet perlfred Montag, 4. März 2013 09:15 Konkretisierung
    Montag, 4. März 2013 09:12
  • Das sollte dann mit dem VisualTreeHelper gehen:
    DependencyObject parent= VisualTreeHelper.GetParent(this);
    UserControl leitet sich von DependencyObject ab, genauso wie (fast) alle anderen anzeigbaren Elemente auch.

    Koopakiller [kuːpakɪllɐ] | Webseite | Code Beispiele | Facebook | Snippets

    Montag, 4. März 2013 12:21
    Moderator
  • Hallo perlfred,

    Ich gehe davon aus, dass die Antwort Dir weitergeholfen hat.
    Wenn nicht, neue Rückfragen oder Ergänzungen zu diesem Thread bleiben weiterhin möglich.

    Danke und viele Grüße,
    Ionut

    Freitag, 15. März 2013 15:21
    Moderator