The Artima Developer Community
Sponsored Link

.NET Buzz Forum
WPF: Oberstes Element bei Mausklick mittels HitTest feststellen

0 replies on 1 page.

Welcome Guest
  Sign In

Go back to the topic listing  Back to Topic List Click to reply to this topic  Reply to this Topic Click to search messages in this forum  Search Forum Click for a threaded view of the topic  Threaded View   
Previous Topic   Next Topic
Flat View: This topic has 0 replies on 1 page
-

Posts: 1524
Nickname: nitronic
Registered: Jul, 2006

Norbert Eder works as a software architect.
WPF: Oberstes Element bei Mausklick mittels HitTest feststellen Posted: Dec 10, 2007 6:53 AM
Reply to this message Reply

This post originated from an RSS feed registered with .NET Buzz by -.
Original Post: WPF: Oberstes Element bei Mausklick mittels HitTest feststellen
Feed Title: Norbert Eder - Living .NET
Feed URL: http://feeds.feedburner.com/NorbertEder-Livingnet
Feed Description: Copyright (c)2005, 2006 by Norbert Eder
Latest .NET Buzz Posts
Latest .NET Buzz Posts by -
Latest Posts From Norbert Eder - Living .NET

Advertisement
Unter der Windows Presentation Foundation kommt es immer wieder vor, dass bei einem Mausklick, auf beispielsweise einem Panel, festgestellt werden muss, welches das oberste von vielen übereinander liegenden Elementen ist (siehe auch WPF: BringToFront und SendToBack).

Hierzu ist die Methode VisualTreeHelper.HitTest sehr praktisch. Diese ermittelt auf Basis der übergebenen Koordination automatisch das in der Z-Order am höchsten angesiedelte Child-Element und liefert als Ergebnis ein HitTestResult zurück, welches eine Referenz auf das entsprechende Element enthält. So kann nun wieder mit dem entsprechenden Objekt weiter gearbeitet werden.

Zur Veranschaulichung noch ein kleins Beispiel. Gegeben sei eine Anwendung, die durch folgendes XAML beschrieben wird:
<Window x:Class="HitTestDemo.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="HitTestDemo" Height="300" Width="300">
    <Grid>
        <Canvas 
            x:Name="BaseCanvas" 
            Background="LightYellow">
            <Canvas 
                x:Name="Canvas1" 
                Canvas.Left="50" 
                Canvas.Top="50" 
                Background="Blue" 
                Width="50" 
                Height="50"/>
            <Canvas 
                x:Name="Canvas2" 
                Canvas.Left="200" 
                Canvas.Top="200" 
                Background="Red" 
                Width="50" 
                Height="50"/>
            <Canvas 
                x:Name="Canvas3" 
                Canvas.Left="40" 
                Canvas.Top="75" 
                Background="Black" 
                Width="50" 
                Height="50"/>
        </Canvas>
    </Grid>
</Window>

In der Code-Behind-Datei findet sich der nachfolgende Code:
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;

namespace HitTestDemo
{
    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();

            BaseCanvas.MouseDown += 
                new MouseButtonEventHandler(BaseCanvas_MouseDown);
        }

        private void BaseCanvas_MouseDown(
            object sender, MouseButtonEventArgs e)
        {
            HitTestResult htr = 
                VisualTreeHelper.HitTest(this, e.GetPosition(this));
            MessageBox.Show("Clicked item: " + 
                ((Canvas)htr.VisualHit).Name);
        }
    }
}

Dies ausgeführt zeigt zuerst dieses Fenster:



Je nachdem, auf welchen Child-Canvas nun geklickt wird, erscheint der Name des jeweiligen Canvas in einer MessageBox, wie hier gezeigt:


Read: WPF: Oberstes Element bei Mausklick mittels HitTest feststellen

Topic: I want a Freeware Utility to ... Previous Topic   Next Topic Topic: European Silverlight Challenge - New Country Sites

Sponsored Links



Google
  Web Artima.com   

Copyright © 1996-2019 Artima, Inc. All Rights Reserved. - Privacy Policy - Terms of Use