首页 > 其他分享 >WPF UNO 测试固定尺寸且水平和垂直对齐设置 Stretch 的元素在容器内的布局行为

WPF UNO 测试固定尺寸且水平和垂直对齐设置 Stretch 的元素在容器内的布局行为

时间:2024-09-12 08:52:24浏览次数:7  
标签:容器 布局 自定义 Stretch 元素 git 尺寸 WPF UNO

本文将告诉大家我对 WPF 的自定义布局容器和自定义控件进行的布局行为测试中的一个小点,即测试固定元素的尺寸的情况下或元素尺寸为有限尺寸的情况下,同步设置元素的水平和垂直对齐为 Stretch 来测试元素在容器内的布局行为,元素分别在容器给元素的布局尺寸大于元素的尺寸和小于元素尺寸的行为

由于刚好运行在 WPF 之上 UNO 框架里的元素行为和 WPF 原生布局行为是完全相同的,本文也作为 UNO 的元素布局测试记录内容

如下面代码,编写一个自定义的继承于 Panel 类型的自定义布局容器,重写布局容器设置其布局行为为将自身的尺寸传入给到里层控件

    protected override Size MeasureOverride(Size availableSize)
    {
        return availableSize;
    }

    protected override Size ArrangeOverride(Size finalSize)
    {
        Children[0].Arrange(new Rect(0, 0, finalSize.Width, finalSize.Height));

        return finalSize;
    }

这就意味着如果将此自定义容器放入到窗口里面,那就可以通过修改窗口的尺寸进而修改到此自定义容器的尺寸,从而测试在自定义容器给里层元素不同的布局空间时,设置了水平和垂直对齐为 Stretch 的元素会如何布局

给以上的这个自定义容器插入一个元素,设置元素给定尺寸且设置了水平和垂直对齐,如下面代码

        var grid = new Grid()
        {
            Background = new SolidColorBrush(Colors.Black),
            Width = 500,
            Height = 500,
            HorizontalAlignment = HorizontalAlignment.Stretch,
            VerticalAlignment = VerticalAlignment.Stretch,
        }

为了更好的进行测试,我还给以上的 Grid 添加一圈的带背景的 Border 控件,用来测试在布局尺寸空间超过元素所需尺寸时的行为,和测试在布局尺寸空间小于元素所需尺寸时的压缩元素裁剪行为

对 WPF 和跑在 WPF 框架之上的 UNO 框架的测试行为都符合下图

根据上图可以知道,当上层容器给定元素的可布局尺寸大于元素所需尺寸时,元素将会进行居中。当上层容器给定元素的可布局尺寸小于元素所需尺寸时,元素行为将和左上对齐时相同

本文以上代码放在githubgitee 欢迎访问

可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码

git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin dc173cdd8cea18bdbec9c99f127252efd4f4a5f8

以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码

git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin dc173cdd8cea18bdbec9c99f127252efd4f4a5f8

获取代码之后,进入 Laicairqechear 文件夹

标签:容器,布局,自定义,Stretch,元素,git,尺寸,WPF,UNO
From: https://www.cnblogs.com/lindexi/p/17991176

相关文章

  • Jenkins 编译 .NET 6 WPF
    最近公司需求要将产品编译自动化,干了那么多年客户端开发一直都是小作坊作业最近换了一个比较正规的互联网公司一切都需要标准化流程化了,自动化也必不可少!然后我就了解到了Jenkins这玩意,找了两天资料感觉还挺简单的写篇文章收录下。因为签名UKey只要windows驱动,所以我只能将环境......
  • WPF创建不规则窗体时WebBrowser控件不显示的问题
    最近有小伙伴需要在不规则窗体上放置WebBrowser控件,因为设置了WindowStyle="None"和AllowsTransparency="True"。导致WebBrowser控件不显示。 界面代码如下所示:1<Windowx:Class="WebBrowserDemo.MainWindow"3xmlns="http://schemas.microsoft.com/win......
  • wpf笔记
    容器:一、网格<Grid></Grid>附加属性:Grid.row(行)、Grid.Column(列)Margin(左上右下的间隙)基本属性(元素化的属性):行定义:<Grid.RowDefinitions/>附加属性:Height、Width(:*、auto数字)列定义:<Grid.ColumnSpanDefinitions/>附加属性:Height、Width(:*、auto数字)尺寸共享:<Grid......
  • WPF Application.Current.Properties[key]=value
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Documents;usingSystem.Windows.Input;......
  • .NET 6.0 + WPF 使用 Prism 框架实现导航
    前言Prism一个开源的框架,专门用于开发可扩展、模块化和可测试的企业级XAML应用程序,适用于WPF(WindowsPresentationFoundation)和XamarinForms等平台。Prism基于MVVM(Model-View-ViewModel)设计模式,提供一套丰富的工具和库,能够实现模块化、依赖注入、导航和事件聚合等功能......
  • C# Console application start wpf window via Application, Encapsulates a Windows
    usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;usingSystem.Windows.Data;usingSystem.Windows.Media.Imaging;namespaceConsoleApp73......
  • C# console application main method new and start wpf window application
    1.NewConsoleapplication;2.Addreference,PresentationCoreandWindowsBase3.usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Text;usingSystem.Threading.Tasks;usingSystem.Windows;usingSystem.Windows.Controls;using......
  • WPF Shape系列控件的详细使用教程
    WPF(WindowsPresentationFoundation)中的Shape控件提供了一系列用于绘制几何形状的元素,如线条、矩形、椭圆、多边形等。这些控件继承自System.Windows.Shapes.Shape基类,具有一致的属性和行为,允许开发者轻松地在应用程序中创建丰富的图形界面。本文将详细介绍WPF中的......
  • WPF UI线程死锁的各种场景
    WPFUI线程死锁的场景通常出现在多线程操作时,特别是当后台线程试图与UI线程交互、更新界面或同步执行任务时。如果没有正确处理线程间的资源访问或同步问题,UI线程可能会被阻塞,导致界面无响应。以下是常见的WPFUI线程死锁场景,以及如何避免这些问题的建议。1.使用Dispatche......
  • WPF datagrid datagridtemplatecolumn image mouseenter show the image in big windo
    <DataGridTemplateColumn><DataGridTemplateColumn.CellTemplate><DataTemplate><ImageSource="{BindingImgUrl}"Width="200"Height="500"><behavior:Inter......