编程语言
首页 > 编程语言> > c#-创建具有受限制比例的可调整大小的Button控件网格的最佳方法(Silverlight.XAML,WinRT)

c#-创建具有受限制比例的可调整大小的Button控件网格的最佳方法(Silverlight.XAML,WinRT)

作者:互联网

用XAML / C#编写WinRT应用程序,我想要一个简单的正方形按钮网格.目前,按钮的数量是固定的,但是随着我创建更多内容,将来还会添加更多按钮.

不得不处理所有UI调整大小(快照,填充,纵向等)和分辨率时,我遇到了UIContainer的问题(我使用了Grid,然后切换了WrapGrid),只是简单地自动调整了按钮的大小,因为我不知道有什么方法可以限制纵横比和方形按钮对我的用户界面很重要.

有没有办法约束按钮控件的纵横比/宽度和高度的比例?如果是这样,我假设将要创建一个自定义控件,但是除了创建样式和数据模板之外,我真的超出了我的理解范围.

对解决此问题的最佳方法有何建议?

解决方法:

您可以创建一个简单的装饰器控件,该控件将覆盖ArrangeOverride并始终将自身排列成正方形,如下所示:

public class SquareDecorator : ContentControl
{
    public SquareDecorator()
    {
        VerticalAlignment = VerticalAlignment.Stretch;
        HorizontalAlignment = HorizontalAlignment.Stretch;
        VerticalContentAlignment = VerticalAlignment.Stretch;
        HorizontalContentAlignment = HorizontalAlignment.Stretch;
    }

    protected override Size MeasureOverride(Size availableSize)
    {
        var baseSize = base.MeasureOverride(availableSize);

        double sideLength = Math.Max(baseSize.Width, baseSize.Height);

        return new Size(sideLength, sideLength);
    }

    protected override Size ArrangeOverride(Size finalSize)
    {
        double sideLength = Math.Min(finalSize.Width, finalSize.Height);

        var result = base.ArrangeOverride(new Size(sideLength, sideLength));

        return result;
    }
}

现在,您可以使用此装饰器包装按钮:

<z:SquareDecorator>
    <Button Content="I'm Square"
            VerticalAlignment="Stretch"
            HorizontalAlignment="Stretch" />
</z:SquareDecorator>

标签:winrt-xaml,xaml,c,silverlight
来源: https://codeday.me/bug/20191031/1976102.html