tutorials.de Buch-Aktion 02/2012
Like Tree2Danke
  • 1 Beitrag von Meldur
  • 1 Beitrag von Meldur
ERLEDIGT
JA
ANTWORTEN
11
ZUGRIFFE
984
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Meldur Meldur ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Beiträge
    143
    Hallo,

    ich habe ein PNG mit Alphakanal und möchte es irgendwie so in Silverlight verwenden können, dass ein Mouse-Event wirklich nur auf nicht-transparente Elemente reagiert. Daraus soll ein völlig unförmiger Button werden. Hat jemand eine Idee?

    Danke,
    Meldur
     

  2. #2
    Avatar von Norbert Eder
    Norbert Eder Norbert Eder ist offline Mitglied Diamant
    Registriert seit
    Feb 2004
    Ort
    Österreich / Graz
    Beiträge
    5.137
    Blog-Einträge
    51
    Anstatt einer Grafik den Button per XAML definieren?
     

  3. #3
    lammpee lammpee ist offline Mitglied Bronze
    Registriert seit
    May 2006
    Beiträge
    41
    Hätte an dieser Frage auch nochmal interesse, aber möchte nicht unbedingt einen Button benutzen.
    In WPF hatte ich einfach die "HitTestCore" Methode überschrieben, leider gibt es diese aber in Silverlight nicht. Gäbe es keine andere Lösung?
     

  4. #4
    Meldur Meldur ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Beiträge
    143
    Da kann ich inzwischen eine Antwort geben (sorry - hätte ich gleich posten sollen. Man unterscheidet ja im WPF zwischen Farbe und Sichtbarkeit (Opacity). Wenn man die Sichtbarkeit auf Null schraubt, dann verliert das Control auch die Fähigkeit, auf MouseEvents zu reagieren. ABER - wenn man die Sichtbarkeit auf 100% läßt und dafür den Alphawert der (Hintergrund-)Farbe auf Null setzt, erhält man ein vollständig transparentes Control, welches immer noch alle Eingaben akzeptiert.

    Viel Spaß,
    Meldur
     

  5. #5
    lammpee lammpee ist offline Mitglied Bronze
    Registriert seit
    May 2006
    Beiträge
    41
    Oder ich frag mal eher, wie ist es möglich, in Silverlight eine Figur die im Hintergrund transparent ist, über eine andere Figur zulegen und durch den hintergrund auf die andere Figur zu klicken.
    Also so, das ich zwischen den Figuren herumklicken kann, aber nur der nicht transparente Bereich nich klickbar ist.
    Geändert von lammpee (26.04.10 um 20:53 Uhr)
     

  6. #6
    Meldur Meldur ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Beiträge
    143
    Du kannst die Figuren jeweils auf ein Canvas (oder ein Grid) legen, welches als Hintergrundfarbe #00000000 hat. Wenn die Figuren sich überlagern und du z.B. durch eine Figur hindurch auf die hintere Figure klicken willst, musst du für das Hintergrundcontrol "PreviewMouseDown" verwenden - das ist jetzt aus WPF- - in Silverlight sollte das so glaube ich ähnlich sein. Ansonsten habe ich in Sivlerlight auch schon mal Pfade mit der selben Hintergrundfabe verwendet, um unregelmäßige Klick-Flächen zu bauen.
    lammpee bedankt sich. 

  7. #7
    lammpee lammpee ist offline Mitglied Bronze
    Registriert seit
    May 2006
    Beiträge
    41
    So wie es ausschaut habe ich wohl dann nen dickes Problem, da es "PreviewMouseDown" nicht gibt. Unter WPF war alles einfacher, aber Silverlight spricht mich mehr an.

    Hab nähmlich ein größeres Projekt vor, nur jetzt ist die Frage ob Silverlight oder WPF.
    Geändert von lammpee (26.04.10 um 21:55 Uhr)
     

  8. #8
    Meldur Meldur ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Beiträge
    143
    Die Frage ist doch eher, ob du eine browserbasierte Anwendung brauchst oder eine Desktopbasierte? Bei Letzterem rate ich auf jeden Fall zu WPF - aber vorerst würde ich noch die Finger von .Net 4.0 lassen - habe es gester bzgl. Grafikperformance getestet und es ist mir noch nicht ganz geheuer. 3.5 ist jedenfalls eine mächtige Umgebung, zu der ich jedem nur raten kann.
     

  9. #9
    lammpee lammpee ist offline Mitglied Bronze
    Registriert seit
    May 2006
    Beiträge
    41
    Naja mein Ziel ist es einfach, eine Applikation zu schaffen, die auf verschiedenen Plattformen läuft z.B. Windows Phone 7.
    Und sofern ich weiß, gibt es doch auch nen Plugin für Silverlight unter Mac.

    Hier hätte ich mal ein Beispiel, wie es in etwa ausschaut. Es stellt den Boden da und dieser ist überschachtelt.

    Geändert von lammpee (27.04.10 um 19:21 Uhr)
     

  10. #10
    Meldur Meldur ist offline Mitglied Gold
    Registriert seit
    Jan 2005
    Beiträge
    143
    Ja da brauchst du wirklich Silverlight, denn das gibt's für alle großen Browser (IE, FF, Safari,...). Schau mal ob es in Silverlight den Parameter IsHittestVisible gibt - damit kannst du Elemente quasie für Mauseingaben "durchlässig" machen, so dass die Elemente darunter reagieren können.
    lammpee bedankt sich. 

  11. #11
    lammpee lammpee ist offline Mitglied Bronze
    Registriert seit
    May 2006
    Beiträge
    41
    Also müsste ich immer beim mouseDown, erst überprüfen was für Objekte sich noch auf den Koordinaten des Mauszeigers befinden und die unteren dann deaktivieren.
     

  12. #12
    lammpee lammpee ist offline Mitglied Bronze
    Registriert seit
    May 2006
    Beiträge
    41
    So das Problem hat sich jetzt erledigt, habs letztendlich doch hinbekommen.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
            void Room_MouseMove(object sender, MouseEventArgs e)
            {
                foreach (Unit unit in GroundGrid.Children)
                {
                    unit.IsHitTestVisible = true;
                }
                List<UIElement> uiElementList = VisualTreeHelper.FindElementsInHostCoordinates(e.GetPosition(null), GroundGrid as Canvas) as List<UIElement>;
                if (uiElementList != null)
                    foreach (UIElement uiElement in uiElementList)
                {
                    if (uiElement is Unit)
                    {
                        Unit unit = (Unit)uiElement;
                        if (unit.IsTransparency(e.GetPosition(unit)) == true)
                        {
                            unit.IsHitTestVisible = false;
                        }  
                    }
     
     
                }
            }
     

Ähnliche Themen

  1. Schaltflächen
    Von AnnJ im Forum Flash Plattform
    Antworten: 4
    Letzter Beitrag: 23.11.07, 07:40
  2. Schaltflächen fixieren?
    Von vaporizer im Forum Flash Plattform
    Antworten: 4
    Letzter Beitrag: 13.12.03, 14:07
  3. Schaltflächen
    Von Avariel im Forum CSS
    Antworten: 2
    Letzter Beitrag: 18.09.03, 08:04
  4. NAV-Schaltflächen Microsoft
    Von mabuse im Forum Javascript & Ajax
    Antworten: 1
    Letzter Beitrag: 11.01.03, 23:11
  5. Antworten: 2
    Letzter Beitrag: 26.03.02, 09:29