WPF C# Tutorial

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Shapes;
using System.Windows.Media;
using System.Threading;
        public class PlotPanel : Panel
        {
            public PlotPanel(): base()
            {
            }
            protected override Size MeasureOverride(Size availableSize)
            {
                Size childSize = availableSize;
                foreach (UIElement child in InternalChildren)
                {
                    child.Measure(childSize);
                }
                return availableSize;
            }
            protected override Size ArrangeOverride(Size finalSize)
            {
                foreach (UIElement child in InternalChildren)
                {
                    double x = 50;
                    double y = 50;
                    child.Arrange(new Rect(new Point(x, y), child.DesiredSize));
                }
                return finalSize; 
            }
        }
  public class app : System.Windows.Application
  {
        PlotPanel plot1 = new PlotPanel();
        Window mainWindow = new System.Windows.Window();
        Rectangle rect1 = new Rectangle();
        protected override void OnStartup (StartupEventArgs e)
    {
        base.OnStartup (e);
            plot1.Background = Brushes.White;
            rect1.Fill = Brushes.CornflowerBlue;
            rect1.Width = 200;
            rect1.Height = 200;
            mainWindow.Content = plot1;
            plot1.Children.Add(rect1);
            mainWindow.Title = "Custom Panel Sample";
            mainWindow.Show();
    }
    [System.STAThread()]
    private static void Main()
    {
      app app = new app();
      app.Run();
    }
  }