Всем привет! Я пытаюсь разобраться с написанием собственных контролов в WPF. И у меня возник следующий вопрос: можно ли как-то наложить какое-либо новое содержимое поверх старого? Я понимаю, что у Button уже есть свой Border, но данный вопрос вызван исключительно академическим интересом и приведен в качестве примера.
class CustomButton : Button
{
private readonly Border _border;
private readonly VisualCollection _visualChildren;
protected override Size ArrangeOverride(Size finalSize)
{
_border.Arrange(new Rect(0, 0, 100, 100));
return finalSize;
}
protected override Int32 VisualChildrenCount => _visualChildren.Count;
protected override Visual GetVisualChild(Int32 index) => _visualChildren[index];
public CustomButton()
{
_visualChildren = new VisualCollection(this);
_border = new Border();
_border.BorderThickness = new Thickness(2);
_border.BorderBrush = Brushes.Green;
_visualChildren.Add(_bottomRight);
}
}
К примеру, как сделать так, чтобы рамка в данном примере рисовалась поверх Content базового класса Button? Понятно, что я здесь переопределяю визуальное дерево, но могу ли я как-то добавить к нему то, что находится в базовом классе?
Я попробовал вызвать метод base.AddVisualChild у базового класса, в надежде на то, что мой элемент добавится в визуальное дерево Button, но это тоже не принесло результата:
class CustomButton : Button
{
private readonly Border _border;
protected override Size ArrangeOverride(Size finalSize)
{
_border.Arrange(new Rect(0, 0, 100, 100));
return finalSize;
}
public CustomButton()
{
_border = new Border();
_border.BorderThickness = new Thickness(2);
_border.BorderBrush = Brushes.Green;
base.AddVisualChild(_border);
}
}
Заранее спасибо!
P.S.: есть ли какая-нибудь документация по данным вопросам и, конкретно, разработке кастомных компонентов для WPF? Понятно, что MSDN в первую очередь, буду рад ссылкам на него, может быть я просто не то искал?
P.P.S.: я понимаю, что то, что я хочу сделать здесь, можно сделать через шаблон, но интересует именно программный подход.