Хорошо, для начала, если вы используете WinForms, вы получаете графический объект, переопределяя методы OnPaint и устанавливая стили элементов управления для ручной рисования. Вот так
... .ctor()
{
...
// indicate user will paint
SetStyle(ControlStyles.UserPaint, true);
// rest is optional if you want/need it
SetStyle(ControlStyles.AllPaintingInWmPaint, true);
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.OptimizedDoubleBuffer, true);
SetStyle(ControlStyles.Opaque, true);
}
protected override void OnPaint(PaintEventArgs p)
{
// depending on how you set the control styles, you might need
// this to draw the background of your control wit a call to the methods base
base.OnPaint(p);
Graphics g = p.Graphics;
// ... Do your painting here with g ....
}
Однако, поскольку вы также пометили это как вопрос как WPF, имейте в виду, что это не будет работать в wpf. Я не очень продвинут в этом вопросе, но я использовал переопределения метода UIElement.OnRender и добился хороших результатов. Это даст вам объект DrawingContext в отличие от объекта PaintEventArgs. Но они работают во многом таким же образом. Кроме того, вам не нужно устанавливать стили управления.