Kolumne: Silverlight Expertise

UI-Elemente der Mausposition finden Speed ObservableCollection WP7-App als Trial anbieten
Kommentare

Die Silverlight-Kolumne „Silverlight Expertise“ des dot.NET Magazins präsentiert monatlich zwei Top-How-To’s zum Thema Silverlight, sodass Einsteiger und fortgeschrittene Silverlight-Experten durch geballtes Wissen gesättigt werden. Dazu kommt jeweils ein How-To zur Windows-Phone-7-Entwicklung. Heute stehen auf der Menükarte: UI-Elemente der Mausposition finden, Speed ObservableCollection und WP7-Apps als Trial anbieten. Viel Spaß dabei.

Menü 1 für Einsteiger: UI-Elemente der Mausposition finden

Bei Anwendungen mit Drag-and-Drop-Funktionalität wird oft das Auffinden von UI-Elementen benötigt. Dazu wird in Silverlight der VisualTreeHelper bereitgestellt. Dieser ermöglicht mit der Methode FindElementsInHostCoordinates das Erkennen von UI-Elementen an einer beliebigen Position. Als Position dient auch die Mausposition. Die kann von MouseEventArgs mit der Property GetPosition an VisualTreeHelper weitergegeben werden. Somit wäre bei einem Drag-and-Drop-Szenario ein Unterbieten des Drag-Verhaltens an bestimmten Stellen der UI möglich. Unter Listing 1 wird verdeutlicht, wie beim Überqueren der UI mit der Maus eine automatische Meldung aufblinkt, falls ein Button darunterliegt.

Listing 1: Das Aufspüren von UI-Elementen an der Mausposition

public partial class MainPage : UserControl
{
    public MainPage()
    {
        InitializeComponent();

        MouseMove += MainPageMouseMove;
    }

    public void MainPageMouseMove(object sender, MouseEventArgs e)
    {
        if (IsButtonElementMouseOver(e.GetPosition(null)))
        {
            MessageBox.Show("Maus über den Button!");
        }
    }

    public bool IsButtonElementMouseOver(Point mouseposition)
    {
        var elements = VisualTreeHelper.FindElementsInHostCoordinates(mouseposition, this);

        var buttons = from element in elements
                      where element is Button
                      select element;

        return buttons.Count() > 0;
    }
}  
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -