Mega Code Archive

 
Categories / C# Tutorial / WPF
 

VisualTreeHelper HitTest

using System; using System.Windows; using System.Windows.Media; using System.Windows.Input;     public class WindowHostingVisual : Window     {         DrawingVisual ghostVisual = null;         public WindowHostingVisual()         {             ghostVisual = new DrawingVisual();             using (DrawingContext dc = ghostVisual.RenderOpen())             {                 dc.DrawGeometry(Brushes.Blue, null, Geometry.Parse(                 @"M 240,250                   C 200,375 200,250 175,200                   C 75,0 100,0 150,0                   C 200,0 250,0 250,150 Z"));                 Pen p = new Pen(Brushes.Black, 10);                 p.StartLineCap = PenLineCap.Round;                 p.EndLineCap = PenLineCap.Round;                 dc.DrawLine(p, new Point(75, 160), new Point(175, 150));             }             AddVisualChild(ghostVisual);             AddLogicalChild(ghostVisual);         }         protected override int VisualChildrenCount         {             get { return 1; }         }         protected override Visual GetVisualChild(int index)         {             if (index != 0)                 throw new ArgumentOutOfRangeException("index");             return ghostVisual;         }         protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)         {             base.OnMouseLeftButtonDown(e);             Point location = e.GetPosition(this);             HitTestResult result = VisualTreeHelper.HitTest(this, location);             if (result.VisualHit == ghostVisual)             {                 if (ghostVisual.Transform == null)                     ghostVisual.Transform = new RotateTransform();                 (ghostVisual.Transform as RotateTransform).Angle++;             }         }         [STAThread]         public static void Main()         {             WindowHostingVisual whv = new WindowHostingVisual();             whv.ShowDialog();         }             }