【WPF.NET开发】构造动态布局

news2024/11/24 6:24:08

本文内容

  1. 系统必备
  2. 创建项目
  3. 配置默认的 Grid Panel 控件
  4. 向面板中添加控件
  5. 测试布局
  6. 汇总所有内容
  7. 后续步骤

在动态定位中,您通过指定子元素相对于父元素应该如何排列以及应该如何包装来排列子元素。 您还可以将窗口和控件设置为在其内容扩展时自动扩展。 

适用于 Visual Studio 的 WPF 设计器提供了许多支持动态定位的 
Panel 控件。 可以通过将一个 Panel 控件添加为另一个的子控件来组合 Panel 控件。 您可以使用下列 Panel 控件在您的应用程序中动态定位元素:

  • Grid

  • DockPanel

  • WrapPanel

  • StackPanel

  • UniformGrid

e2h7fzkw.alert_caution(zh-cn,vs.100).gif

重要事项

只要可能,就最好使用动态布局。 动态布局是最灵活的,适应诸如本地化之类的内容更改,并且允许最终用户最大限度地控制他们的环境。 

在本演练中,您将执行下列任务:

  • 创建一个 WPF 应用程序。

  • 配置默认的 
    Grid Panel 控件。

  • 将控件添加到面板中。

  • 测试布局。

下面的插图说明您的应用程序将如何显示。

bb514519.dynamiclayout(zh-cn,vs.100).png

显示的对话框和菜单命令可能会与“帮助”中的描述不同,具体取决于您现用的设置或版本。 若要更改设置,请在“工具”菜单上选择“导入和导出设置”。 

1、系统必备

您需要以下组件来完成本演练:

  • Visual Studio 2010 及以上版本

2、创建项目

第一个过程是为该应用程序创建项目。

创建项目

  1. 使用 Visual Basic 或 Visual C# 创建一个名为 DynamicLayout 的新 WPF 应用程序项目。 

    在本演练中,您将不会编写任何代码。 为项目选择的语言是用于应用程序中代码隐藏页面的语言。

    MainWindow.xaml 将在 WPF 设计器中打开。

  2. 在“设计”视图中,选择该窗口。 

  3. 在**“属性”**窗口中,设置 Window
     的下列属性:

    Property

    宽度

    400

    高度

    200

    SizeToContent

    WidthAndHeight

    还可以使用大小调整控点在“设计”视图中调整该窗口的大小。

  4. 在**“文件”菜单上,单击“全部保存”**。

3、配置默认的 Grid Panel 控件

默认情况下,新的 WPF 应用程序包含一个带有 
Grid 面板的 Window
。 在此过程中,您向该网格中添加四个行和四个列。 您将每一列的宽度都设置为 *,这样可用的宽度会在四列之间均分。 您将其中三行的高度设置为“Auto”,因此这三行可以调整大小以容纳其内容。 您将另一行的高度设置为 *,因此该行将使用剩余的可用高度。

添加 Panel 控件

  1. 在“设计”视图中,选择该网格。

  2. (可选)在**“属性”**窗口中,找到 ShowGridLines 属性并选中该复选框。

    当该应用程序运行时,网格线将显示在窗口上。 这适用于调试,但对于生产代码,您应该清除 ShowGridLines 属性的复选框。

  3. 在**“属性”**窗口中,找到 ColumnDefinitions 属性并单击“属性值”列中的省略号按钮。

    将出现**“集合编辑器”**对话框。

    1. 单击四次**“添加”**添加四列。

    2. 将第一行的 Width 属性设置为 Auto。

    3. 将第二行的 Width 属性设置为 *。

    4. 将第三行的 Width 属性设置为 Auto。

    5. 将第四行的 Width 属性设置为 Auto。

    6. 单击**“确定”以关闭“集合编辑器”**并返回到 WPF 设计器。

      现在该网格中有四列,但仅有一列显示。 其 Width 属性被设置为 Auto 的列会暂时隐藏,因为它们没有任何内容。 对于本演练,这样是可以的。 为了避免将来出现这种情况,您可以在工作时使用星号调整大小,然后在完成后改成“Auto”。

  4. 在**“属性”**窗口中,找到 RowDefinitions 属性并单击“属性值”列中的省略号按钮。

    将出现**“集合编辑器”**对话框。

    1. 单击四次**“添加”**添加四行。

    2. 将第一行的 Height 属性设置为 Auto。

    3. 将第二行的 Height 属性设置为 Auto。

    4. 将第三行的 Height 属性设置为 *。

    5. 将第四行的 Height 属性设置为 Auto。

    6. 单击**“确定”以关闭“集合编辑器”**并返回到 WPF 设计器。

      现在该网格中有四行,但仅有一行显示。 其 Height 属性设置为 Auto 的行会暂时隐藏,因为它们没有任何内容。 对于本演练,这样是可以的。 为了避免将来出现这种情况,您可以在工作时使用星号调整大小,然后在完成后改成“Auto”。

  5. 在**“文件”菜单上,单击“全部保存”**。

4、向面板中添加控件

接下来,您可以向面板中添加控件并使用 Grid
 的 Column
 和 
Row 附加属性来对它们进行动态定位。

向面板中添加控件

  1. 在**“工具箱”“公用”**组中,将一个 Label
     控件拖到 
    Grid 上。

  2. 在**“属性”**窗口中,设置 
    Label 的下列属性:

    Property

    Content

    Name:

    Grid.Column

    0

    Grid.ColumnSpan

    1

    Grid.Row

    0

    Grid.RowSpan

    1

    宽度

    Auto

    高度

    23

    HorizontalAlignment

    Stretch

    VerticalAlignment

    Top

    Margin

    20,20,10,10

  3. 在**“工具箱”“公用”**组中,将一个 Label
     控件拖到 
    Grid 上。

  4. 在**“属性”**窗口中,设置 
    Label 的下列属性:

    Property

    Content

    Password:

    Grid.Column

    0

    Grid.ColumnSpan

    1

    Grid.Row

    1

    Grid.RowSpan

    1

    宽度

    Auto

    高度

    23

    HorizontalAlignment

    Stretch

    VerticalAlignment

    Top

    Margin

    20,10,10,10

  5. 在**“工具箱”“公用”**组中,将一个 
    TextBox 控件拖到 
    Grid 上。

  6. 在**“属性”**窗口中,设置 
    TextBox 的下列属性:

    Property

    Grid.Column

    1

    Grid.ColumnSpan

    3

    Grid.Row

    0

    Grid.RowSpan

    1

    宽度

    Auto

    高度

    Auto

    HorizontalAlignment

    Stretch

    VerticalAlignment

    Stretch

    Margin

    10,20,20,10

  7. 在**“工具箱”“公用”**组中,将一个 TextBox
     控件拖到 
    Grid 上。

  8. 在**“属性”**窗口中,设置 
    TextBox 的下列属性:

    Property

    Grid.Column

    1

    Grid.ColumnSpan

    3

    Grid.Row

    1

    Grid.RowSpan

    1

    宽度

    Auto

    高度

    Auto

    HorizontalAlignment

    Stretch

    VerticalAlignment

    Stretch

    Margin

    10,10,20,10

  9. 在**“工具箱”“公用”**组中,将一个 Button
     控件拖到 Grid
     上。

  10. 在**“属性”**窗口中,设置 
    Button 的下列属性:

    Property

    Content

    确定

    Grid.Column

    2

    Grid.ColumnSpan

    1

    Grid.Row

    3

    Grid.RowSpan

    1

    宽度

    75

    高度

    23

    HorizontalAlignment

    Stretch

    VerticalAlignment

    Stretch

    Margin

    10,10,6,20

  11. 在**“工具箱”“公用”**组中,将一个 
    Button 控件拖到 
    Grid 上。

  12. 在**“属性”**窗口中,设置 Button
     的下列属性:

    Property

    Content

    取消

    Grid.Column

    3

    Grid.ColumnSpan

    1

    Grid.Row

    3

    Grid.RowSpan

    1

    宽度

    75

    高度

    23

    HorizontalAlignment

    Stretch

    VerticalAlignment

    Stretch

    Margin

    6,10,20,20

  13. 在**“文件”菜单上,单击“全部保存”**。

5、测试布局

最后,您运行该应用程序,并验证随着用户调整窗口的大小以及控件的内容扩展并超出控件的大小该布局是否动态地更改。

测试布局

  1. 在**“调试”菜单上,单击“启动调试”**。

    该应用程序启动并且该窗口将显示。

  2. 在“名称”文本框中,随便键入一些内容以填充该文本框。 键入到该文本框的末尾处时,该文本框和窗口都会扩展以容纳键入的文本。

  3. 关闭该窗口。

  4. 在**“调试”菜单上,单击“启动调试”**。

    该应用程序启动并且该窗口将显示。

  5. 在垂直方向和水平方向调整该窗口的大小。

    列将均匀扩展以使用可用空间。 文本框拉伸以填充扩展的列。 三个行保持其高度,第四行扩展以使用可用空间。

  6. 关闭该窗口。

  7. 在“设计”视图中,选择“名称”标签。

  8. 在**“属性”**窗口中,将 Content 属性更改为“请在此处输入您的全名:”。

    在“设计”视图中,该标签扩展以容纳文本。

  9. 在**“调试”菜单上,单击“启动调试”**。

    该应用程序启动并且该窗口将显示。 标签控件可显示更长的文本。

  10. 关闭该窗口。

6、汇总所有内容

下面是完成的 MainWindow.xaml 文件:

XAML复制

<Window x:Class="MainWindow"
    xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="200" Width="400" SizeToContent="WidthAndHeight">
    <Grid ShowGridLines="True">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="Auto" />
        </Grid.ColumnDefinitions>
        <Label Grid.Column="0" Grid.Row="0" Margin="20,20,10,10" Width="Auto" Height="23" HorizontalAlignment="Stretch" VerticalAlignment="Top" Name="Label1">Name:</Label>
        <Label Grid.Column="0" Grid.Row="1" Margin="20,10,10,10" Width="Auto" Height="23" HorizontalAlignment="Stretch" VerticalAlignment="Top" Name="Label2">Password:</Label>
        <TextBox Grid.Column="1" Grid.Row="0" Margin="10,20,20,10" Grid.ColumnSpan="3" Height="Auto" VerticalAlignment="Stretch" Name="TextBox1" />
        <TextBox Grid.Column="1" Grid.Row="1" Margin="10,10,20,10" Grid.ColumnSpan="3" Name="TextBox2" />
        <Button Grid.Column="2" Grid.Row="3" Margin="10,10,6,20" Width="75" Height="23" HorizontalAlignment="Stretch" Name="Button1">OK</Button>
        <Button Grid.Column="3" Grid.Row="3" Margin="6,10,20,20" Width="75" Height="23" Name="Button2">Cancel</Button>
    </Grid>
</Window>

7、后续步骤

您可以尝试了解如何通过将本演练中的 
Grid 面板替换为以下面板来利用动态布局实现不同效果:

  • DockPanel

  • WrapPanel

  • StackPanel

  • UniformGrid

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

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

相关文章

Avalonia中使用Prism实现区域导航功能

前言 上一篇文章我们讲了在Avalonia开发中&#xff0c;引入Prism框架来完成项目的MVVM迁移。本章内容将带领大家学习如何在Avalonia中使用Prism框架实现区域导航功能。如果你还不知道Avalonia中如何引入Prism框架&#xff0c;请看我上一篇文章&#xff1a;Avalonia框架下面使用…

公有云迁移研究——AWS DMS

大纲 1 什么是DMS2 DMS的作用3 DMS在迁移的时候都做些什么4 在使用DMS的时候我们需要做些什么5 操作5.1 创建两个数据库终端节点5.2 创建迁移任务 6 可能遇到的问题7 总结 在本地机房或其他云往AWS上做迁移时&#xff0c;往往会遇到数据库迁移的任务。如果数据量不是特别大&…

【unity3D】Transform组件(如何访问和获取Transform组件)

&#x1f497; 未来的游戏开发程序媛&#xff0c;现在的努力学习菜鸡 &#x1f4a6;本专栏是我关于游戏开发的学习笔记 &#x1f236;本篇是unity的Transform组件 Transform组件 基础知识介绍三个成员变量常用属性扩展 Transform的相关查找方法静态方法 基础知识 介绍 在Unit…

ELK(一)—介绍

一、ELK介绍 ELK是指Elasticsearch、Logstash和Kibana&#xff0c;这三个开源软件构成了一个功能强大的日志管理和分析平台。Elasticsearch作为分布式搜索引擎&#xff0c;负责实时存储和检索大规模数据&#xff1b;Logstash用于从多个数据源采集、处理和传输日志数据&#xff…

分包(微信小程序)

首先&#xff0c;微信小程序中使用分包是为了减少首屏的请求&#xff0c;因为微信小程序会默认下载主包内的内容并展示到页面上&#xff0c;但是随着业务量的增加&#xff0c;代码量也会越来越大。会导致我们启动小程序的时候首页加载速度过慢的这个问题。这时我们就可以采用分…

dockerdesktop推送镜像到dockerhub

1.查看镜像(打开powershell) docker ps2.打tag docker tag pengzx/aspnetcoredocker:v1 pengzx/aspnetcoredocker:v2pengzx/aspnetcoredocker:v1:本地的镜像名加版本号 pengzx/aspnetcoredocker:v2&#xff1a;需要上传的镜像名&#xff08;要以dockerhub的用户名开头/本地镜像…

Data Linked UI

DataLinkedUl是一个Unity框架,它允许您在为您的应用程序创建用户界面时实现专业的数据驱动方法。使用此资产,您可以创建灵活的基于瓦片的任意大小的复杂接口系统。 核心功能: 灵活性-允许适应和调整数据变化,允许各种结构和功能配置,而不需要对现有系统进行重大破坏。 可伸…

HTTP之跨域

HTTP之跨域 跨域&#xff08;Cors&#xff09;两种请求简单请求浏览器不同的处理方式Access-Control-Allow-OriginAccess-Control-Allow-CredentialswithCredentials属性 非简单请求服务器回应&#xff1a;什么时候会触发OPTIONS&#xff08;预检请求&#xff09;呢&#xff1f…

ubuntu 20.04 server 安装 zabbix

ubuntu 20.04 server 安装 zabbix 参考文档 https://zhuanlan.zhihu.com/p/587415883?utm_id0 https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/ https://blog.csdn.net/ammc520/article/details/134279322 在Ubuntu 20.04上安装MySQL教程 https://b…

高防IP是什么? 防护CC 对抗DDOS

什么是DDoS高防IP&#xff1f; DDoS&#xff08;分布式拒绝服务&#xff09;攻击是指攻击者通过利用大量恶意流量向目标服务器发送请求&#xff0c;导致目标服务器无法正常处理合法用户的请求。DDoS高防IP是一种通过技术手段来应对DDoS攻击的解决方案。它能够过滤掉恶意流量&a…

算法 搜索

深度优先搜索 广度优先搜索 深搜与广搜的区别 深搜 dfs——回溯——“不撞南墙不回头” 思路 总的来说是不撞南墙不回头&#xff0c;相当于一个人严格按照固定的行为模式。 例如走方格&#xff0c;依次走上下左右&#xff0c;每次走到一个新格子记录自己已经走过的方向&am…

亿胜盈科ATR2037 无限射频前端低噪声放大器

亿胜盈科ATR2037 是一款应用于无线通信射频前端&#xff0c;工作频段为 0.7 到 6GHz 的超低噪声放大器。 ATR2037 低噪声放大器采用先进的 GaAs pHEMT 工艺设计和制作&#xff0c;ATR2037 低噪声放大器在整个工作频段内可以获得非常好的射频性能超低噪声系数。 亿胜盈科ATR203…

班级查分软件制作教程:老师必备技能!

首先&#xff0c;你需要选择一个合适的软件平台来制作班级查分软件。推荐使用群发成绩&#xff0c;因为它是一个功能强大且易于使用的在线查询系统&#xff0c;可以帮助你快速高效地制作班级查分软件​。 在制作班级查分软件之前&#xff0c;你需要准备好学生的成绩数据。这可以…

云原生的 CI/CD 框架tekton - pipeline(一)

文章目录 1. 官方介绍2. 组件2.1 Tekton Pipelines2.2 部署pipeline2.3 部署dashborad2.3.1 task2.3.2 taskrun2.3.3 Pipeline2.3.4 PipelineRun 3. 案例案例1: 拉取代码并查看readmestep1: 创建task - 拉取代码step2: 创建task - 查看reamdestep3: 创建task的编排 - pipelines…

函数递归。

文章目录 前言一、什么是递归二、递归的限制条件三、递归举例1.求n的阶乘2. 举例2&#xff1a;顺序打印一个整数的每一位 四、递归的优劣总结 前言 不多废话了&#xff0c;直接开始。 一、什么是递归 递归是学习C语言函数绕不开的⼀个话题&#xff0c;那什么是递归呢&#xf…

桥接网卡绑定

目录 1、创建一个桥接设备和会话 2、配置软件桥接网卡的IP地址、网关和地址获取方式 3、添加从设备和会话到桥接设备 4、启动从设备会话 5、启动桥接会话 ​ 桥接就是把一台机器上的若干个网络接口连接起来&#xff0c;其结果是&#xff0c;其中一个网卡收到的…

【Polar靶场WEB签到】

题目&#xff1a; <?phperror_reporting(0);$file $_GET[file];if(!isset($file))$file 1;$file str_replace(../, , $file);include_once($file.".php");highlight_file(__FILE__); ?>解答&#xff1a;1、进入index页面&#xff0c;说让你加弟弟&#x…

LeetCode:2477. 到达首都的最少油耗(DFS C++、Java)

目录 2477. 到达首都的最少油耗 题目描述&#xff1a; 实现代码与解析&#xff1a; dfs 2477. 到达首都的最少油耗 题目描述&#xff1a; 给你一棵 n 个节点的树&#xff08;一个无向、连通、无环图&#xff09;&#xff0c;每个节点表示一个城市&#xff0c;编号从 0 到 n…

生鲜蔬果展示预约小程序作用是什么

线下生鲜蔬果店非常多&#xff0c;对商家来说主要以同城生意为主&#xff0c;而在互联网电商的发展下&#xff0c;更多的商家会选择搭建私域商城进行多渠道的销售卖货和拓展&#xff0c;当然除了直接卖货外&#xff0c;还有产品纯展示或预约订购等需求。 但无论哪种模式&#…

一:对爬虫的简单认识

一&#xff1a;爬虫前导知识 1.爬虫引入&#xff1a; ​ 网络爬虫又称为网络蜘蛛&#xff1b;网络蚂蚁&#xff1b;网络机器人等&#xff0c;可以自动高效地从互联网的海量信息中浏览获取到我们感兴趣的信息&#xff0c;在浏览信息的时候需要按照我们制定的规则进行&#xff…