понедельник, 25 октября 2010 г.

Пользовательские элементы управления. WPF vs WinForms. Часть 1.

Сейчас на работе заставляют писать на WPF, но чтобы не забыть WinForms, буду рассматривать реализацию одних и тех же задач и в той, и в другой технологии.


Переопределение стандартных элементов управления

Как правило, стандартных элементов управления вполне хватает, чтобы написать приложение с UI. Если вдруг хочется сделать интерфейс нестандартным, то можно взять чужую библиотеку элементов, например DevExpress.

Но доработка стандартных контролов не такая уж и сложная вещь. Вполне по силам сделать и самому. Чем и предлагаю заняться. Реализую самое простое, что приходит в голову: чекбокс с нестандартным отображением.


CheckBox на WinForms

Здесь один способ. Надо реализовать свой класс:

class MyCheckBox: CheckBox
{
  protected override void OnPaint(PaintEventArgs e)
  {
    // рисуем фон, текст, графику
  }
}



CheckBox на WPF

В нашем распоряжение имеется уже два способа.

Первым идет дедовский способ:

class MyCheckBox: CheckBox
{
  protected override void OnRender(DrawingContext dc)
  {
    //рисуем программно, аналогично WinForms
  }
}


Второй вариант – переопределить шаблон элемента:

<Checkbox Template="{StaticResource myCheckBox}"/>
<Controltemplate x:Key="myCheckBox" TargetType="CheckBox">
  <Border>…</Border>
  <ControlTemplate.Triggers>…</ControlTemplate.Triggers>
</ControlTemplate>




Собственно вкратце это все. Исходные коды примера.

Во второй части буду рассматривать написание составных элементов.

1 комментарий: