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

本文内容

  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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Oracle merge into语句(merge into Statement)

在Oracle中&#xff0c;常规的DML语句只能完成单一功能&#xff0c;&#xff0c;例如insert/delete/update只能三选一&#xff0c;而merge into语句可以同时对一张表进行更新/插入/删除。 目录 一、基本语法 二、用法示例 2.1 同时更新和插入 2.2 where子句 2.3 delete子句 2.4…

数据库Delete的多种用法

数据库的Delete操作是用来删除数据库中的数据记录的&#xff0c;它是数据库操作中的一种重要操作&#xff0c;能够帮助用户删除不需要的数据&#xff0c;以便保持数据库的整洁和高效。在使用Delete操作时&#xff0c;需要注意确保操作的准确性和安全性&#xff0c;以免误删重要…

[JavaScript前端开发及实例教程]计算器井字棋游戏的实现

计算器&#xff08;网页内实现效果&#xff09; HTML部分 <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>My Calculator&l…

Ruff智能物联网网关助力工厂数智化运营,实现产量提升5%

数字化转型是大势所趋&#xff0c;以工业互联网为代表的数实融合是发展数字经济的重要引擎&#xff0c;也是新质生产力的一大助力。工业互联网是新工业革命的重要基石&#xff0c;加快工业互联网规模化应用&#xff0c;是数字技术和实体经济深度融合的关键支撑&#xff0c;是新…

回归预测 | MATLAB实现CNN-BiLSTM(卷积双向长短期记忆神经网络

效果一览 基本介绍 提出一种同时考虑时间与空间因素的卷积&#xff0d;双向长短期记忆&#xff08; CNN-BiLSTM&#xff09;模型&#xff0c;将具有空间局部特征提取能力的卷积神经网络&#xff08;CNN&#xff09;和具有能同时考虑前后方向长时间信息的双向长短期记忆&#xf…

JavaScript基础知识21——for循环

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 今天学习for循环&#xff0c;以下为学习笔记。 1、while循环和for循环有啥不同&#xff1f; 1.1、在实际开发中&#xff0c;while循环用来解决循环次数不确定时使用&#xff0c;当一个循环不确定会循环多少次时&#…

【每日OJ —— 94. 二叉树的中序遍历】

每日OJ —— 94. 二叉树的中序遍历 1.题目&#xff1a;94. 二叉树的中序遍历2.解法2.1.算法讲解2.2.代码实现2.3.提交通过展示 1.题目&#xff1a;94. 二叉树的中序遍历 2.解法 2.1.算法讲解 1.首先如果在每次每个节点遍历的时候都去为数组开辟空间&#xff0c;这样的效率太低…

OWASP安全练习靶场juice shop-更新中

Juice Shop是用Node.js&#xff0c;Express和Angular编写的。这是第一个 完全用 JavaScript 编写的应用程序&#xff0c;列在 OWASP VWA 目录中。 该应用程序包含大量不同的黑客挑战 用户应该利用底层的困难 漏洞。黑客攻击进度在记分板上跟踪。 找到这个记分牌实际上是&#…

【PyTorch】tensorboardX的安装和使用

文章目录 1. tensorboardX的安装2. tensorboardX的使用 tensorboardX是一种能将训练过程可视化的工具 1. tensorboardX的安装 安装命令&#xff1a; pip install tensorboardXVSCode集成了TensorBoard支持&#xff0c;不过事先要安装torch-tb-profiler&#xff0c;安装命令&…

文件管理和操作工具Path Finder mac功能介绍

Path Finder mac是一款Mac平台上的文件管理和操作工具&#xff0c;提供了比Finder更丰富的功能和更直观的用户界面。它可以帮助用户更高效地浏览、复制、移动、删除和管理文件&#xff0c;以及进行各种高级操作。 Path Finder mac软件功能 - 文件浏览&#xff1a;可以快速浏览文…

如何购买华为云服务器

华为云是华为推出的云计算服务平台&#xff0c;旨在为企业和个人提供全面的云端解决方案。它提供了包括计算、存储、数据库、人工智能、大数据、安全等多种云服务&#xff0c;覆盖了基础设施、平台和软件级别的需求。华为云致力于构建安全可信赖的云计算基础设施&#xff0c;以…

vite初识

Vite是伴随着Vue3正式版一起发布的&#xff0c;最开始Vite 1.0的版本是为Vue3服务的&#xff0c;并不是跨框架的。之后半年时间左右&#xff0c;出现了Vite 2.0版本&#xff0c;Vite 2.0真正脱离了和Vue3的强关联&#xff0c;以插件的方式&#xff0c;可以集成到目前流行的主流…

【每日一题】到达首都的最少油耗

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;贪心深搜 写在最后 Tag 【递归/深度优先搜索】【树】【2023-12-05】 题目来源 2477. 到达首都的最少油耗 题目解读 每个城市都有一位代表需要前往城市 0 进行开会。每个城市都有一辆座位数为 seats 的汽车&#xff0…

2023.12.4 关于 Spring Boot 统一异常处理

目录 引言 统一异常处理 异常全部监测 引言 将异常处理逻辑集中到一个地方&#xff0c;可以避免在每个控制器或业务逻辑中都编写相似的异常处理代码&#xff0c;这降低了代码的冗余&#xff0c;提高了代码的可维护性统一的异常处理使得调试和维护变得更加容易&#xff0c;通…

Python智能语音识别语翻译平台|项目后端搭建

Python程序设计基础&#xff0c;第三方库Django、requests、hashlib、pyttsx3等的使用&#xff0c;百度API语音识别业务接口、文本朗读业务接口、翻译业务接口的传入。 01、任务实现步骤 任务描述&#xff1a;本任务利用Django框架搭建智能语音识别与翻译平台的后端&#xff0…

leetcode:统计感冒序列的数目【数学题:组合数含逆元模版】

1. 题目截图 2.题目分析 需要把其分为多个段进行填充 长为k的段&#xff0c;从两端往中间填充的方案数有2 ** (k - 1)种 组合数就是选哪几个数填哪几个段即可 3.组合数含逆元模版 MOD 1_000_000_007 MX 100_000# 组合数模板 fac [0] * MX fac[0] 1 for i in range(1, MX…

GPT-Crawler一键爬虫构建GPTs知识库

GPT-Crawler一键爬虫构建GPTs知识库 写在最前面安装node.js安装GPT-Crawler启动爬虫结合 OpenAI自定义 assistant自定义 GPTs&#xff08;笔者用的这个&#xff09; 总结 写在最前面 GPT-Crawler一键爬虫构建GPTs知识库 能够爬取网站数据&#xff0c;构建GPTs的知识库&#xf…

LeetCode //C - 221. Maximal Square

221. Maximal Square Given an m x n binary matrix filled with 0’s and 1’s, find the largest square containing only 1’s and return its area. Example 1: Input: matrix [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,…

计算机操作系统2

1.计算机操作系统的发展和分类 2.操作系统的运行机制 3.中断 3.1.中断&#xff08;关键作用&#xff09; 4.系统调用 5.操作系统的内核 6.操作系统的体系结构 7.开机过程&#xff08;操作系统引导&#xff09;

Vue3网站用户引导功能【Intro.js】

一、介绍 Intro.js 是一个用于创建网站用户引导、功能介绍和教程的 JavaScript 库。它允许开发者通过步骤和提示突出显示网站上的特定元素&#xff0c;以帮助用户更好地了解和使用网站的功能。以下是 Intro.js 的一些关键特点和用法介绍&#xff1a; 更多Intro.js 功能网址&a…