C# 基本桌面编程(二)

一、前言

本章为C# 基本桌面编程技术的第二节也是最后一节。前一节在下面这个链接

C# 基本桌面编程(一)icon-default.png?t=N7T8https://blog.csdn.net/qq_71897293/article/details/135024535?spm=1001.2014.3001.5502

二、控件布局

1 叠放顺序

        在WPF当中布局,通常如果在同一个位置叠放了多个控件,那么控件则会被我们上一层的空间所覆盖。这个叠放就相当于我们的一个盒子我们盒子一层一层的叠放。我们从上往下看,只能看到最上一层。我们在控件布局当中也一样。当我们在同一个位置叠放多个相同或者是不同大小的控件则会造成我们只能看到最上一层的控件而底下被叠放住的控件可能无法看见或者是只能看见部分,在这种情况下,如果是在不能避免的情况下,我们通常可以使用属性来解决 。

属性:Panel.ZIndex  来解决。

举个例子:

 <Grid Name="grid"><ButtonHorizontalAlignment="Center"VerticalAlignment="Center"Panel.ZIndex="1"Content="按钮1" /><ButtonHorizontalAlignment="Center"VerticalAlignment="Center"Content="按钮2" /></Grid>

注意:我们在XAML中越后面写的控件,越显示在上方。  

2 对齐边距填充和尺寸

效果属性
尺寸宽度和高度Width和Height
控件水平位置HorizontalAlignment
控件垂直位置VerticalAlignment   
控件水平内容位置HorizontalContentAlignment
控件垂直内容位置VerticalContentAlignment
边距设置Margin 和Padding(左上右下,Thickness值)
填充如:HorizontalAlignment 设置为Stretch 控件的宽度就会随着容器的宽度所改变而改变 

3 面板控件

Canvas: Canvas.Left="" Canvas.Top=" " Canvas.Bottom=""  Canvas.Right=""  四个属性分别设置Canvas 控件子元素的位置。需要注意的是top和left属性的优先级高于Bottom和right

DockPanel:  DockPanel.Dock 可以指定停靠边缘的位置。作为附加属性可以给任何被DockPanel控件容纳的子属性。

提示:如果指定停靠某个位置务必要确定停靠的位置能容下当前需要停靠的控件 

Grid: Grid它可以将控件分为多行或者是多列,指定将子控件放在某一行或者某一列。

举个例子:

<Grid ShowGridLines="True"><Grid.ColumnDefinitions><ColumnDefinition /><ColumnDefinition /></Grid.ColumnDefinitions><Button /><GridSplitterGrid.RowSpan="2"Grid.Column="0"BorderBrush="Black"BorderThickness="1" />
</Grid>

示例解释:

        ShowGridLines 是否显示分割线   <Grid.ColumnDefinitions> 创建了一个列集合,指定有多少列。当前是指定有两列。GridSplitter 控件能拖动,动态的改变分割的列大小。

Grid.Column是指定在地几行,也是一个附加属性。

StackPanel:Orientation属性可以设置当前控件的排放方式。控件效果:将包含的控件按照横向或者是纵向排布。

WrapPanel:和StackPanel效果一致。只不过它有一个特征:当前容器的宽度如果摆不下它会自动换行。

三、常用控件介绍

Lable、TextBlock、Button、Textbook、CheckBox、RadioButton、ComboBox、TabControl、image。

1 Lable

        显示文本。 Content 属性设置显示内容。在_+字母可以实现按住ALT的时候首字母下面会显示一个下划线。

举个例子:

  <Label Content="_Name" FontSize="50" />

运行效果:

2 TextBlock

        显示文本但是他的执行效率会比Lable高。如果显示文本过长无法显示可以放在 ScrollViewer 容器中。

举个例子:

 <ScrollViewer Height="150" VerticalScrollBarVisibility="Visible"><TextBlockFontSize="50"Text="_Na_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Name_Nameme"TextWrapping="Wrap" /></ScrollViewer>

示例解释:

        FontSize 设置字体大小。Text 设置内容信息  TextWrapping 设置换行方式。Wrap 为换行 ,NoWrap 不换行 ,WrapWithOverflow 当前放不下内容时,允许非常长的单个单词超出文本框的边缘  。

运行效果: 

 3 Button

        按钮处理用户点击。可以指定它的Content 来容量任何控件。

4 Textbook

        输入文本框。可以设置IsReadOnly 为 true 则控件不可输入。为只读。

举个例子:

  <TextBoxAcceptsReturn="False"IsEnabled="True"Text="输入"TextWrapping="Wrap"VerticalScrollBarVisibility="Visible" />

 示例解释:

        AcceptsReturn 设置在文本当中输入是否可以通过回车键换行。IsEnabled控件是否可用。Text 用户输入的内容 TextWrapping 换行的方式 VerticalScrollBarVisibility 设置当前控件中的垂直滚动条是否可见 

5 CheckBox

用来显示用户的选择。

举个例子:

 <CheckBoxContent="男"IsChecked="False"IsThreeState="True" />

示例解释: 

           Content 控件显示内容  IsChecked 控件是否被选中  IsThreeState控件是否有三种选择形态。(如何三种可选择形态是代表:确定、不确定、以及无法选择不清楚的含义 )  

6 RadioButton

        用来显示用户选择但是可以在多个选项当中筛选出只能选择一个选项例如给多个选项进行一个选项分组。

举个例子:

 <StackPanel><RadioButtonContent="显示内容1"GroupName="1"IsChecked="False" /><RadioButtonContent="显示内容2"GroupName="1"IsChecked="False" /><RadioButtonContent="显示内容3"GroupName="1"IsChecked="False" /></StackPanel>

示例解释:GroupName 设置分组名字。他是一个string类型。效果就是当多个RadioButton控件的GroupName 属性为同一个值,意思就是将他们分到了同一个组。那么同一个组将只能有一个选项被选择。通常这个控件可以用来做用户调研表格    

7 ComboBox

也是显示用户选择但是它比较节省空间。

举个例子:

 <Window.Resources><x:Array x:Key="MyitemSource" Type="s:String"><s:String>S1</s:String><s:String>S3</s:String><s:String>S3</s:String></x:Array></Window.Resources><Grid ShowGridLines="True"><Grid.ColumnDefinitions><ColumnDefinition /><ColumnDefinition /></Grid.ColumnDefinitions><ComboBox VerticalAlignment="Center" ItemsSource="{StaticResource MyitemSource}" /></Grid>

运行效果:

8 TabControl

将一个页面分割成多个页面

举个例子:

 <Window.Resources><x:Array x:Key="MyitemSource" Type="s:String"><s:String>S1</s:String><s:String>S3</s:String><s:String>S3</s:String></x:Array></Window.Resources><Grid ShowGridLines="True"><Grid.ColumnDefinitions><ColumnDefinition /><ColumnDefinition /></Grid.ColumnDefinitions><TabControl ItemsSource="{StaticResource MyitemSource}" /></Grid>

运行效果:

9 Image

图像控件用来放置图片。

举个例子:

<Grid ShowGridLines="True"><Grid.ColumnDefinitions><ColumnDefinition /><ColumnDefinition /></Grid.ColumnDefinitions><Image Source="C:\Users\Administrator\Desktop\image2\1.jpg" />
</Grid>

 运行效果:

四、绑定

解释四种绑定方式 DataContext、绑定到本地对象、静态绑定到外部对象 、动态绑定到外部对象。

1 DataContext:

        将窗口的DataContext设置为该对象实例,则就是把当前窗口的绑定上下文指定到了该对象。

2 绑定到本地对象:

举个例子:

 <StackPanel VerticalAlignment="Center"><SliderName="Sl"VerticalAlignment="Center"Maximum="100" /><ProgressBarMinHeight="20"Maximum="100"Value="{Binding ElementName=Sl, Path=Value, Mode=TwoWay}" /></StackPanel>

示例解释:

        通过ElementName来指定绑定源。绑定一般由四个组件构成,绑定目标,目标属性,绑定源,属性源  。注意:不是每一次都要明确指出这四个部分,因为有些绑定目标已经被隐式指定了,在这里我们需要提供绑定源以及源属性就可以了 。

3 静态绑定到外部对象:

举个例子:

<Windowx:Class="WpfApp1.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:Lo="clr-namespace:WpfApp1"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"Title="MainWindow"d:DesignHeight="134.4"d:DesignWidth="253.12"BorderThickness="0"mc:Ignorable="d"><Window.Resources><Lo:Mylist x:Key="Mylist" /></Window.Resources><Grid ShowGridLines="True"><Grid.ColumnDefinitions><ColumnDefinition /><ColumnDefinition /></Grid.ColumnDefinitions><StackPanel VerticalAlignment="Center"><ComboBox ItemsSource="{StaticResource Mylist}" /></StackPanel></Grid></Window>
  public class Mylist : ObservableCollection<int>{public Mylist(){Add(1);Add(12);Add(13);}}

示例解释:

        当前我们在Windows的资源字典当中声明了一个名称空间,当前的名称空间就这个类所在的名称空间。所以我们可以通过当前的名称空间拿到我们创建的这个类,在资源字典当中声明之后并给它取一个键的名称。然后再我们控件当中的Itemsource再去绑定它  注意这里能绑定的原因是因为我当前这个类也是一个集合类Itemsource是一个IEnumerable 接口类型。这里能绑定是因为我的类实现了当前这个接口。

4 动态绑定到外部对象:

动态创建的对象意思就是我们绑定的数据可以实时的加载变更。

举个例子:

using System;
using System.ComponentModel;
using System.IO;
using System.Windows;
using System.Xml.Serialization;namespace WpfApp1
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{My Mys=new My ();public MainWindow(){DataContext = Mys;InitializeComponent();if (File.Exists("My.xml")){var serializer = new XmlSerializer(typeof(My));using (var stream = File.OpenRead("My.xml")){var deserializedMy = serializer.Deserialize(stream) as My;if (deserializedMy != null){Mys.Age = deserializedMy.Age;Mys.Name = deserializedMy.Name;}}}}private void Button_Click(object sender, RoutedEventArgs e){if (!string.IsNullOrWhiteSpace(Mys.Name) && Mys.Age != default){var serializer = new XmlSerializer(typeof(My));using (var stream = File.Open("My.xml",FileMode.Create)){serializer.Serialize(stream, Mys);}}}}[Serializable]public class My:INotifyPropertyChanged{public My(){}private int age;public int Age{get { return age; }set { age = value; Update_Data(nameof(Age)); }}private string name;public event PropertyChangedEventHandler PropertyChanged;public void Update_Data(string p){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(p));}public string Name{get { return name; }set { name = value; Update_Data(nameof(Name)); }}}
}
<Windowx:Class="WpfApp1.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"Title="MainWindow"Width="643"Height="384"BorderThickness="0"mc:Ignorable="d"><Canvas><LabelCanvas.Left="82"Canvas.Top="50"Content="姓名" /><TextBoxCanvas.Left="131"Canvas.Top="55"Width="79"Height="15"HorizontalAlignment="Left"VerticalAlignment="Top"Text="{Binding Name}" /><LabelCanvas.Left="80"Canvas.Top="88"HorizontalAlignment="Left"VerticalAlignment="Top"Content="年龄" /><TextBoxCanvas.Left="132"Canvas.Top="93"Width="83"Height="14"HorizontalAlignment="Left"VerticalAlignment="Center"Text="{Binding Age}" /><ButtonCanvas.Left="248"Canvas.Top="91"Width="72"Height="17"HorizontalAlignment="Left"VerticalAlignment="Center"Click="Button_Click"Content="保存" /></Canvas></Window>

当前运行效果:当你按下保存按钮将把你的数据保存起来,在下次启动时自动加载 。

界面样貌:

         我只是粗略的介绍了当前章节内容,因为我实在是太熟悉本章节内容,所以做了很多筛检,详细文章推荐大家阅读书籍。

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

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

相关文章

华为配置OSPF与BFD联动示例

组网需求 如图1所示&#xff0c;SwitchA、SwitchB和SwitchC之间运行OSPF&#xff0c;SwitchA和SwitchB之间的交换机仅作透传功能。现在需要SwitchA和SwitchB能快速感应它们之间的链路状态&#xff0c;当链路SwitchA-SwitchB发生故障时&#xff0c;业务能快速切换到备份链路Swi…

极狐GitLab DevSecOps 之容器镜像安全扫描

容器镜像安全 现状 最近某银行遭受供应链攻击的事件传的沸沸扬扬&#xff0c;安全又双叒叕进入了人们的视野。安全确实是一个非常重要&#xff0c;但是又最容易被忽略的话题。但是现在到了一个不得不人人重视安全&#xff0c;人人为安全负责的时代。尤其以现在非常火爆的云原…

java设计模式-工厂方法模式

1.工厂方法(FactoryMethod)模式的定义 定义一个创建产品对象的工厂接口&#xff0c;将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。 2.工厂方法模式的主要优缺点 优点&#xff1a; 用户只需要知道具体工厂的名称…

智能优化算法应用:基于乌燕鸥算法3D无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于乌燕鸥算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于乌燕鸥算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.乌燕鸥算法4.实验参数设定5.算法结果6.参考文…

低代码企业级PMO项目管理系统,360度全景透视企业管理视角

在一个崇高的目标支持下&#xff0c;不停地工作&#xff0c;即使慢&#xff0c;也一定会获得成功。 爱因斯坦 ★ 前情概要&#xff1a; 企业级PMO项目管理业务是行业里相对成熟和规范的业务&#xff0c;拥有众多商业套件和标准产品。 然而随着企业数字化建设进入深水区&#…

《Global illumination with radiance regression functions》

总结一下最近看的这篇结合神经网络的全局光照论文 这是一篇2013年TOG的论文。 介绍 论文的主要思想是利用了神经网络的非线性特性去拟合全局光照中的间接光照部分&#xff0c;采用了基础的2层MLP去训练&#xff0c;最终能实现一些点光源、glossy材质的光照渲染。为了更好的理…

解决App Store上架提示您必须上传 12.9 英寸 iPad Pro(第 2 代)显示屏的截屏

出错场景 在App Store Connect中&#xff0c;上架App时&#xff0c;出现以下错误提示. 要开始审核流程&#xff0c;必须提供以下项目&#xff1a;您必须上传 12.9 英寸 iPad Pro&#xff08;第 2 代&#xff09;显示屏的截屏。&#xff08;2048&#xff0c;2732&#xff09;您…

overleaf 加载pdf格式的矢量图时,visio 图片保存为pdf格式,如何确保pdf页面大小和图片一致

Overleaf支持多种矢量图形格式&#xff0c;其中一些常见的包括&#xff1a; PDF&#xff08;Portable Document Format&#xff09;&#xff1a; PDF是一种常见的矢量图形格式&#xff0c;Overleaf可以直接加载和显示PDF文件。许多绘图工具和LaTeX生成的图形都可以导出为PDF格式…

ShenYu网关Http服务探活解析

文章目录 网关端服务探活admin端服务探活 Shenyu HTTP服务探活是一种用于检测HTTP服务是否正常运行的机制。它通过建立Socket连接来判断服务是否可用。当服务不可用时&#xff0c;将服务从可用列表中移除。 网关端服务探活 以divide插件为例&#xff0c;看下divide插件是如何获…

21、同济、微软亚研院、西安电子科技大提出HPT:层次化提示调优,独属于提示学习的[安妮海瑟薇]

前言&#xff1a; 本论文由同济大学、微软亚洲研究院、西安电子科技大学&#xff0c;于2023年12月11日中了AAAI2024 论文&#xff1a; 《Learning Hierarchical Prompt with Structured Linguistic Knowledge for Vision-Language Models》 地址&#xff1a; [2312.06323]…

网络(十)ACL和NAT

前言 网络管理在生产环境和生活中&#xff0c;如何实现拒绝不希望的访问连接&#xff0c;同时又要允许正常的访问连接&#xff1f;当下公网地址消耗殆尽&#xff0c;且公网IP地址费用昂贵&#xff0c;企业访问Internet全部使用公网IP地址不够现实&#xff0c;如何让私网地址也…

机器翻译:跨越语言边界的智能大使

导言 机器翻译作为人工智能领域的瑰宝&#xff0c;正在以前所未有的速度和精度&#xff0c;为全球沟通拓展新的可能性。本文将深入研究机器翻译的技术原理、应用场景以及对语言交流未来的影响。 1. 简介 机器翻译是一项致力于通过计算机自动将一种语言的文本翻译成另一种语言的…

android studio 快捷输入模板提示

在Android开发中&#xff0c;我们经常会遇到一些重复性的代码&#xff0c;例如创建一个新的Activity、定义一个Getter方法等。为了提高开发效率&#xff0c;Android Studio提供了Live Templates功能&#xff0c;可以通过简化输入来快速生成这些重复性代码。 按下图提示设置&am…

【深度学习目标检测】八、基于yolov5的抽烟识别(python,深度学习)

YOLOv5是目标检测领域一种非常优秀的模型&#xff0c;其具有以下几个优势&#xff1a; 1. 高精度&#xff1a;YOLOv5相比于其前身YOLOv4&#xff0c;在目标检测精度上有了显著的提升。YOLOv5使用了一系列的改进&#xff0c;如更深的网络结构、更多的特征层和更高分辨率的输入图…

SI24R03国产自主可控RISC-V架构MCU低功耗2.4GHz收发芯片SoC

目录 RISC-V架构的优势SI24R03/04特性射频收发器模块特征MCU 模块特征 其他特征 RISC-V架构的优势 相对于目前主流的英特尔X86架构及ARM等架构来说&#xff0c;RISC-V架构具有指令精简、模块化、可扩展、开源、免费等优点。RISC-V的基础指令集只有40多条&#xff0c;加上其他基…

【问题记录】Qt IDE打开报错“由于找不到python27.dll,无法继续执行代码“

一&#xff0c;问题现象 新安装Qt打开时报错&#xff0c;如下所示&#xff0c;但是软件能正常打开。 二&#xff0c;问题原因 对应的dll库没有找到。 三&#xff0c;解决方法 找到对应的dll库复制到指定目录&#xff1b; 这里我本地搜索有这个库&#xff0c;就直接放到“…

C++学习笔记(十五)

继承 继承是面向对象三大特性之一 有些类与类之间存在特殊的关系&#xff0c;例如下图中&#xff1a; 我们发现&#xff0c;定义这些类时&#xff0c;下级别的成员除了拥有上一级的共性&#xff0c;还有自己的特性。 这个时候我们就可以考虑利用继承的技术&#xff0c;减少重…

【TB作品】51单片机 实物+仿真-电子拔河游戏_亚博 BST-M51

代码工程。 http://dt4.8tupian.net/2/28880a66b12880.pg3这段代码是用于一个数字拔河游戏的嵌入式系统&#xff0c;采用了基于8051架构的单片机&#xff0c;使用Keil C51编译器。 主要功能包括&#xff1a; 数码管显示&#xff1a;使用了四个数码管&#xff08;通过P2的控制…

css的元素显示模式(有单行文字垂直居中,侧边栏等案例)

目录 1. 什么是元素的显示模式 2. 元素显示模式的类型 块元素 行内元素 行内块元素 3. 元素显示模式的转换 4.文字垂直居中 5.具体实现案例 1. 什么是元素的显示模式 定义&#xff1a;元素显示模式就是元素&#xff08;标签&#xff09;以什么方式进行显示&#xff0c;…

windows10-tdengine的安装及使用

win10-tdengine的安装及使用 一、下载及安装配置1.1 下载安装1.2 配置1.3 关闭防火墙和开放端口1.3.1 关闭防火墙1.3.2 开放6030端口 二、启动及关闭服务2.1 启动tdengine服务2.2 关闭tdengine服务2.2 开机自启动配置 四、可视化工具五、TDengine 命令行&#xff08;CLI&#x…