Пользовательский пограничный контроль в UWP XAML - PullRequest
0 голосов
/ 02 июля 2018

Вы можете создавать пользовательские панели в UWP XAML, наследуя класс Panel и переопределяя MeasureOverride и ArrangeOverride. Как бы я поступил так же для панели с одним ребенком, подобно элементу управления Border? К сожалению, я не могу получить от Border, потому что он запечатан.

Я пробовал это, но это не работает (конечно, это упрощенный пример того, чего я пытаюсь достичь):

public sealed class ProportionedPresenter : FrameworkElement
{
    public static readonly DependencyProperty ChildProperty = DependencyProperty.Register(
        "Child",
        typeof(object),
        typeof(ProportionedPresenter),
        new PropertyMetadata(null));

    public object Child
    {
        get { return this.GetValue(ProportionedPresenter.ChildProperty); }
        set { this.SetValue(ProportionedPresenter.ChildProperty, value); }
    }

    protected override Size MeasureOverride(Size availableSize)
    {
        var minDimension = Math.Min(availableSize.Width, availableSize.Height);
        var desiredSize = new Size(minDimension, minDimension);
        if (this.Child is UIElement childElement)
        {
            childElement.Measure(desiredSize);
            var maxDimension = Math.Max(childElement.DesiredSize.Width, childElement.DesiredSize.Height);
            desiredSize = new Size(maxDimension, maxDimension);
        }
        return desiredSize;
    }

    protected override Size ArrangeOverride(Size finalSize)
    {
        if (this.Child is UIElement childElement)
        {
            childElement.Arrange(new Rect(new Point(), childElement.DesiredSize));
        }
        return finalSize;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...