Поделиться через


Практическое руководство. Создание пользовательского элемента Panel

Обновлен: Ноябрь 2007

Пример

В этом примере демонстрируется переопределение поведения макета по умолчанию для элемента Panel и создание пользовательских элементов макета, производных от Panel.

В этом примере определяется простой пользовательский элемент Panel с именем PlotPanel, который размещает дочерние элементы в соответствии с двумя заданными в коде координатами x и y. В этом примере x и y равны 50; таким образом, все дочерние элементы расположены на одинаковом расстоянии от осей x и y.

Чтобы реализовать поведение пользовательской Panel, в примере используются методы MeasureOverrideArrangeOverride. Каждый метод возвращает данные Size, необходимые для размещения и отображения дочерних элементов.

Public Class PlotPanel
    Inherits Panel
    'Override the default Measure method of Panel.

    Protected Overrides Function MeasureOverride(ByVal availableSize As System.Windows.Size) As System.Windows.Size
        Dim childSize As Size = CType(availableSize, Size)
        For Each child As UIElement In InternalChildren
            child.Measure(childSize)
        Next
        Return MyBase.MeasureOverride(availableSize)
    End Function
    Protected Overrides Function ArrangeOverride(ByVal finalSize As System.Windows.Size) As System.Windows.Size
        For Each child As UIElement In InternalChildren
            Dim x As Double = 50
            Dim y As Double = 50
            child.Arrange(New Rect(New System.Windows.Point(x, y), child.DesiredSize))
        Next
        Return MyBase.ArrangeOverride(finalSize)
    End Function
End Class
public class PlotPanel : Panel
{
    // Default public constructor
    public PlotPanel()
        : base()
    {
    }

    // Override the default Measure method of Panel
    protected override Size MeasureOverride(Size availableSize)
    {
        Size panelDesiredSize = new Size();

        // In our example, we just have one child. 
        // Report that our panel requires just the size of its only child.
        foreach (UIElement child in InternalChildren)
        {
            child.Measure(availableSize);
            panelDesiredSize = child.DesiredSize;
        }

        return panelDesiredSize ;
    }
    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; // Returns the final Arranged size
    }
}

Полный пример содержится в разделе Пример создания простой пользовательской панели.

См. также

Задачи

Пример создания пользовательской панели с переносом содержимого

Основные понятия

Общие сведения о панелях

Ссылки

Panel