10.WPF布局 - 实践

news/2025/10/10 16:35:16/文章来源:https://www.cnblogs.com/slgkaifa/p/19133350

10.WPF布局 - 实践

WPF 布局代码详细解析(带注释)

<!-- 主窗口定义 --><Windowx:Class="WPFNestingLayouts.MainWindow"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:WPFNestingLayouts"mc:Ignorable="d"Title="MainWindow"Height="350"Width="604"> <!-- 窗口尺寸设置 --><!-- 根布局:网格布局 --><Grid Background="AntiqueWhite"> <!-- 设置整个网格背景为古董白 --><!-- 行定义:5行等分高度 --><Grid.RowDefinitions><RowDefinition Height="*" /> <!-- 第1行:星号(*)表示等比分配剩余空间 --><RowDefinition Height="*" /> <!-- 第2行 --><RowDefinition Height="*" /> <!-- 第3行 --><RowDefinition Height="*" /> <!-- 第4行 --><RowDefinition Height="*" /> <!-- 第5行 --></Grid.RowDefinitions><!-- 列定义:单列占满宽度 --><Grid.ColumnDefinitions><ColumnDefinition Width="*" /> <!-- 唯一列:宽度占满整个网格 --></Grid.ColumnDefinitions><!-- 标题标签(第1行) --><LabelContent="Employee Info"FontSize="15"FontWeight="Bold"Grid.Column="0"Grid.Row="0"/> <!-- 位于第0列第0行 --><!-- 姓名输入区(第2行) --><StackPanelGrid.Column="0"Grid.Row="1"Orientation="Horizontal"> <!-- 水平堆叠面板 --><Label Content="Name"VerticalAlignment="Center" <!-- 垂直居中 -->Width="70"/> <!-- 标签固定宽度 --><TextBox Name="txtName"Text="Muhammad Moo"VerticalAlignment="Center"Width="200"> <!-- 文本框宽度200 --></TextBox></StackPanel><!-- ID输入区(第3行) --><StackPanelGrid.Column="0"Grid.Row="2"Orientation="Horizontal"><Label Content="ID"VerticalAlignment="Center"Width="70"/><TextBox Name="txtID" <!-- 注意:应命名为txtID更合理 -->Text="421"VerticalAlignment="Center"Width="50"> <!-- 较窄的文本框 --></TextBox></StackPanel><!-- 年龄输入区(第4行) --><StackPanelGrid.Column="0"Grid.Row="3"Orientation="Horizontal"><Label Content="Age"VerticalAlignment="Center"Width="70"/><TextBox Name="txtAge" <!-- 应命名为txtAge -->Text="32"VerticalAlignment="Center"Width="50"> <!-- 宽度与ID相同 --></TextBox></StackPanel><!-- 职位输入区(第5行) --><StackPanelGrid.Column="0"Grid.Row="4"Orientation="Horizontal"><Label Content="Title"VerticalAlignment="Center"Width="70"/><TextBox Name="txtTitle" <!-- 应命名为txtTitle -->Text="Programmer"VerticalAlignment="Center"Width="200"> <!-- 宽度与姓名相同 --></TextBox></StackPanel></Grid></Window>

关键设计解析:

  1. 网格布局结构

    • 5行等高分配(Height=“*”),单列占满宽度
    • 每行放置一个水平StackPanel实现标签+文本框的组合
  2. 嵌套布局技巧

    Grid 根布局
    第0行 Label标题
    第1行 StackPanel
    第2行 StackPanel
    第3行 StackPanel
    第4行 StackPanel
    Label + TextBox
    Label + TextBox
  3. 控件设计特点

    • 垂直居中:所有控件设置 VerticalAlignment="Center"
    • 宽度控制
      • 标签统一宽度70(保证对齐)
      • 文本框分两种尺寸(50/200)
    • 默认值:预填充了示例数据
  4. 需要修正的问题

    • 命名不一致:建议修改为:
      • txtCitytxtID
      • txtStatetxtAge
      • txtCountrytxtTitle
    • 属性拼写错误VerticalMoognment 应为 VerticalAlignment

布局效果:

+-----------------------------------+
|         Employee Info (标题)       |  <- 第0行
+-----------------------------------+
| [Name]  [Muhammad Moo       ]     |  <- 第1行水平StackPanel
+-----------------------------------+
| [ID]    [421]                     |  <- 第2行
+-----------------------------------+
| [Age]   [32]                      |  <- 第3行
+-----------------------------------+
| [Title] [Programmer         ]     |  <- 第4行
+-----------------------------------+

优化建议:

  1. 使用 Grid 替代 StackPanel 实现更精确的字段对齐
  2. 添加 Margin 属性增加控件间距
  3. 为必填字段添加验证逻辑
  4. 使用 TextBlock + TextBox 组合代替纯文本框标签

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/934231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

066_尚硅谷_运算符优先级

066_尚硅谷_运算符优先级1.运算符优先级

基于MATLAB的路面裂缝检测识别

一、系统架构设计 1. 功能模块划分 graph TDA[图像采集] --> B[预处理模块]B --> C[裂缝检测引擎]C --> D[特征提取]D --> E[分类识别]E --> F[结果可视化]F --> G[数据存储] 2. 硬件配置建议模块 推…

HDU6794:Tokitsukaze and Multiple

实质上是最多能找到多少个连续子段和为 \(p\) 的倍数 太聪明了

当下环境通缩分析

📅 通缩的起点与当前态势 关于这次通缩周期的起点,根据多个宏观经济指标的表现,可以梳理出以下时间线:关键指标持续下行:本次通缩压力是逐步累积的结果。一个非常重要的观察点是生产者价格指数(PPI),它至2025…

使用qt读取系统字体库,并进行英文名称映射

映射函数:// 创建中文字体到英文名称的映射表 QMap<QString, QString> createFontMapping() {QMap<QString, QString> mapping;mapping[QString::fromLocal8Bit("宋体")] = "simsun.ttc&q…

gitlab配置aws的s3作为docker镜像的存储

编辑 /etc/gitlab/gitlab.rb 文件external_url http://192.168.60.118 registry_external_url http://192.168.60.118:5005 gitlab_rails[registry_enabled] = true gitlab_rails[registry_host] = "192.168.60.…

阿克曼函数

点击查看代码 #include <iostream> using namespace std; int ack(int x,int y) {if (x==0){return y + 1;}else if (x > 0 && y == 0){return ack(x - 1, 1);}else if (x > 0 && y > …

shell脚本监控ssl证书到期时间

一、需求 说明:(1)读取域名列表文件。(2)获取域名到期时间,进行告警后邮件提醒。 #!/bin/bash ## 第1步 配置文件 # 颜色定义 RED=\033[0;31m GREEN=\033[0;32m YELLOW=\033[1;33m BLUE=\033[0;34m PURPLE=\033…

AI如何通过卫星图像识别刺猬栖息地

剑桥大学研究人员利用卫星图像和机器学习技术,通过识别黑莓灌木丛来绘制刺猬潜在栖息地地图,为保护这种濒危物种提供创新解决方案。AI如何通过卫星图像识别刺猬栖息地 你不能从太空中直接发现刺猬,但通过寻找黑莓灌…

04-补充mybatis-plus的Service接口

04-补充mybatis-plus的Service接口$(".postTitle2").removeClass("postTitle2").addClass("singleposttitle");常用方法查询相关方法以前是我们自己实现的Service接口和方法先在mp给我们…

LeetCode热题100-75、跳跃游戏

LeetCode热题100-75、跳跃游戏给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回…

rust 模块和引用

rust的模块声明有两种方式: 1、mod.rs文件方式 在 2018 年后的版本中已逐渐被新的模块系统取代,Rust 官方文档中已删除对 mod.rs 的介绍,主要因为该功能在 Rust 1.30 版本后被新的模块命名约定替代。 目录结构为: …

moectf2025-reverse-wp

moectf2025-reverse-wp upx 壳是什么?upx是什么?upx可以用来干什么?用自己的upx脱壳 upx -d +文件地址然后就去ida里面编译但是找不到main函数 我们直接shift+F12查看字符串然后点进去鼠标移到这里 按X 然后定位到主…

国标GB28181网页直播平台EasyGBS如何构建智慧社区一体化视频监控方案?

国标GB28181网页直播平台EasyGBS如何构建智慧社区一体化视频监控方案?随着科技的飞速发展,智慧社区的概念逐渐深入人心。智慧社区旨在通过先进的信息技术手段,实现社区的智能化管理和服务,提升居民的生活质量和社区…

完整教程:【论文阅读】纯视觉语言动作(VLA)模型:全面综述

完整教程:【论文阅读】纯视觉语言动作(VLA)模型:全面综述2025-10-10 16:09 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importan…

TypeScript Declaration Merging(声明合并)使用说明

最近在进行前端开发的时候,为了拓展引用,使用了TS声明合并的特性,完整的了解了一下该特性,特此记录成笔记。 声明合并指在TypeScript里面,编译器将两个或者多个独立的相同名称的声明合并到一起。合并后的定义同时…

第七章 手写数字识别V5

# 优化: # 新建Model类,将神经网络的结构定义、训练流程(前向/后向)和预测逻辑统一封装起来 # 何将权重更新的职责从网络层(Linear)中分离出来,交给优化器(SGD)来完成 # 使用动量梯度下降优化算法(MSGD) # …

关于根据距离列表排序sql

关于根据距离列表排序sql//第一种 根据经纬度排序 $map = "1=1 ";if ($loadCode && $unloadCode) {$map .= " AND load_city_id = $loadCode and unload_city_id = $unloadCode";}…

2025年高适配铝型材厂家推荐:深圳市方达铝业领衔,3家企业覆盖多场景

随着科技的进步与工业的发展,铝型材作为一种轻质、高强度且耐腐蚀的材料,广泛应用于 3C 数码、智能家居、工业设备等多个领域。然而,市场上铝型材厂家众多,产品质量与服务水平参差不齐,给消费者的选择带来了困扰。…

注册c模块到lua中使用

#define REGISTER_CUSTOM_LIBRARY(name, lua_c_fn) \ int lua_c_fn(lua_State*); \ luaL_requiref(L, name, lua_c_fn, 0); \ lua_pop(L, 1) /* remove lib */ //注册c模块void open_custom_libs(lua_State* …