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();
}
}