【上位机——WPF】布局控件

常用布局控件

  1. Grid:网格,根据自定义行和列来设置控件的布局
  2. StackPanel:栈式面板,包含的元素在竖直或水平方向排成一条直线
  3. WrapPanel:自动折行面板,包含的元素在排满一行后,自动换行
  4. DockPanel:泊靠式面板,内部的元素可以选择泊靠方向
  5. UniformGrid:网格,UniformGrid就是Grid的简化版,每个单元格的大小相同
  6. Canvas:画布,内部元素根据像素为单位绝对坐标进行定位。
  7. Border:装饰的控件,此控件用于绘制边框及背景,在Border中只能有一个子控件

这里除了Border控件,其他控件都继承于Panel基类。

Panel基类

所有Panel元素都支持FrameworkElement定义的基本大小调整和定位属性,包括Height、Width、HorizontalAlignment、VerticalAlignment、Margin和LayoutTransform。Panel公开对了解和使用布局至关重要的其他属性。Background属性用于借助Brush填充派生面板元素的边界之间的区域。Children表示组成Panel的子元素集合。InternalChildren表示Children集合的内容以及由数据绑定生成的成员。两者均由父Panel内承载的子元素的UIElementCollection组成。

Panel提供了附加属性,ZIndex。假如一个单行单列的Grid布局控件中有两个Button,正常情况下,这两个Button都会以撑满Grid中,那么到底哪一个Button在上面,哪一个在下面。就看这两个Button的Panel.ZIndex附加属性的值,值越大的在上面,而值较小的那个Button将被上面的Button遮盖,从而在视觉上,用户只能看到一个Button。

    <Grid Background="AliceBlue" PreviewMouseUp="Grid_PreviewMouseUp">
        <Button Panel.ZIndex="2" Content="按钮1" Width="200"  Height="30"/>
        <Button Panel.ZIndex="0" Content="按钮2" Width="200" Height="30"/>

    </Grid>

Grid(网格)

Grid控件是WPF中所有布局控件中最好用的一个,因为它是自适应屏幕的宽度,最关键的一点是,它在呈现时,其ActuaWidth实际宽度和ActualHeight实际高度会有一个计算值,我们在业务开发中,有时候要根据父控件的实际宽度和高度来计算子控件的呈现位置和大小。

<Window x:Class="WpfApp1.MyGrid"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MyGrid" Height="450" Width="800">
    <!--展示线条-->
    <Grid ShowGridLines="True">
        
        <!--三行-->
        <Grid.RowDefinitions>
            <RowDefinition Height="*" /> <!--Height="100" 固定高度-->
            <RowDefinition Height="2*"/> <!--Height="2*" 等比例的高度-->
            <RowDefinition Height="2*"/> <!--Height="Auto" 跟随文本的高度-->
        </Grid.RowDefinitions>

        <!--两列-->
        <Grid.ColumnDefinitions>
            <ColumnDefinition/>
            <ColumnDefinition Width="Auto"/> <!--Width="Auto" 跟随文本的宽度-->
        </Grid.ColumnDefinitions>

        <!--第一行第一列-->
        <!--Grid.RowSpan="2" 合并单元格行-->
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Grid.RowSpan="2" Text="文本1" Grid.Row="0" Grid.Column="0" FontSize="30"/>
        <!--第一行第二列-->
        <TextBlock Text="文本2" Grid.Row="0" Grid.Column="1" FontSize="30"/>

        <!--<TextBlock Text="文本3" Grid.Row="1" Grid.Column="0" FontSize="30"/>-->
        <TextBlock Text="文本4" Grid.Row="1" Grid.Column="1" FontSize="30"/>

        <!--Grid.ColumnSpan="2" 合并单元格列-->
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" 
                   Grid.ColumnSpan="2"
                   Text="文本5" Grid.Row="2" Grid.Column="0" FontSize="30"/>
        <!--<TextBlock Text="文本6" Grid.Row="2" Grid.Column="1" FontSize="30"/>
### 关于C++上位机开发的教程资料 #### 使用QT Creator进行C++上位机开发 在C++中,`cout`用于输出控制,而`cin`则负责输入操作,这使得数据处理更为直观和便捷[^1]。对于基于Qt框架的上位机应用而言,《从零开始编写一个上位机(串口助手)》提供了详细的指导,该文档不仅介绍了如何利用QT Creator+C++构建图形化界面,还深入探讨了通过这些工具实现高效的数据交换机制。 #### Widget类的作用及其编程实践 Widget组件构成了GUI应用程序的核心部分,在《零基础C++开发上位机--基于QT5.15的串口助手》系列文章里提到,`widget.cpp`文件承载着所有与用户交互逻辑有关的功能定义工作。开发者可以根据实际需求在此处添加自定义控件、响应事件以及管理布局等重要任务[^2]。 #### 实现串口通信功能的具体方法 针对串口通讯模块的设计思路,《昨天我们研究UI界面...继续学习开发串口助手的通信部分程序》一文中指出,完成可用端口扫描之后,下一步就是着手建立稳定可靠的传输通道。此过程涉及到了波特率设置、校验方式选择等多个方面,确保能够满足不同应用场景下的性能要求[^3]。 #### 开发环境的选择与发展路径规划 虽然有多种IDE可供挑选,《本文使用Visual Studio 2022作为开发环境...都基于.NET框架》强调了微软平台下两种主流的技术路线——即WPF(Windows Presentation Foundation) 和 WinForms (Windows Forms),它们各自具备独特的优势来支持复杂的业务流程建模[^4];然而值得注意的是,如果目标是创建跨平台解决方案,则应优先考虑像Qt这样的开源库。 #### 打包发布独立运行的应用程序 最后,在项目接近尾声时,《零基础C++开发上位机...生成EXE可执行文件》描述了一个简单易懂的方法论帮助最终用户脱离特定依赖项限制,从而让编译后的成果能够在任何一台PC设备上顺利启动并正常运作[^5]。 ```cpp // 示例代码片段展示基本结构 #include <QApplication> #include "mainwindow.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值