Mega Code Archive

 
Categories / C# Tutorial / WPF
 

Open DrawingContext from DrawingVisual

using System; using System.Windows; using System.Windows.Media; using System.Collections.Generic; using System.Windows.Input;     public class WindowHostingVisual : Window     {         List<Visual> visuals = new List<Visual>();         public WindowHostingVisual()         {             DrawingVisual bodyVisual = new DrawingVisual();             using (DrawingContext dc = bodyVisual.RenderOpen())             {                 dc.DrawGeometry(Brushes.Blue, null, Geometry.Parse(@"M 240,250 C 75,0 100,0 150,0 C 200,0 250,0 250,150 Z"));             }             visuals.Add(bodyVisual);             foreach (Visual v in visuals)             {                 AddVisualChild(v);                 AddLogicalChild(v);             }         }         protected override int VisualChildrenCount         {             get { return visuals.Count; }         }         protected override Visual GetVisualChild(int index)         {             if (index < 0 || index >= visuals.Count)                 throw new ArgumentOutOfRangeException("index");             return visuals[index];         }         protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)         {             base.OnMouseLeftButtonDown(e);             Point location = e.GetPosition(this);             HitTestResult result = VisualTreeHelper.HitTest(this, location);             if (result.VisualHit.GetType() == typeof(DrawingVisual))             {                 DrawingVisual dv = result.VisualHit as DrawingVisual;                 if (dv.Transform == null)                     dv.Transform = new RotateTransform();                 (dv.Transform as RotateTransform).Angle++;             }         }         [STAThread]         public static void Main()         {             WindowHostingVisual whv = new WindowHostingVisual();             whv.ShowDialog();         }     }