这节来讲一些XAML中常用控件的使用。

Window

Window控件是一个基础,它是其它控件的容器,我们可以通过修改其中的一些属性来设置窗体的显示效果,下面说一些最常用的属性:

WindowStartupLocation 这个属性用来设置窗体启动时的位置,他有三个值:CenterOwner,CenterScreen,Manual。CenterOwner 是指在这个窗体的拥有者中心显示,我们可以通过后台通过代码来指定当前窗体的拥有者是谁:

当在MainWindowBase中点击按钮时,就会弹出MainWindow页面,效果如下:

CenterScreen是启动时在屏幕正中间,Manual 是默认,大约在屏幕左上角的位置。

WindowStyle 设个属性用来设置窗体的风格,它有四个值:None,SingleBorderWindow,ThreeDBorderWindow,ToolWindow。SingleBorderWindow是默认值,就是默认启动的样子,ThreeDBorderWindow是3D边框,在win10中已经和SingleBorderWindow样式一致了,None是无边框,启动时如下:

图片

ToolWindow是专门用于显示设置窗体的,没有最大最小化按钮,只有关闭按钮:

WindowState 这个属性用来设置窗体启动时是最大化还是最小化,它有三个值:默认大小Normal,就是用户通过width和height定义的大小,Minimized 启动时最小化,Maximized 启动时最大化。

一般情况下,我们要做一个好看的窗体,使用微软给我们定义好的样式是不够的,我们会将窗体样式设置为None,然后自己去定义标题栏,但是当设置为None时,顶部还有一条白色的框,如下:

为了去掉它,我们还要用到window的另一个属性:AllowsTransparency 它用来设置窗体是否可以透明,这是个bool属性,设置为true,窗体就允许透明,上边这条白框就透明看不到了。

当窗体样式设为None时,因为标题栏被隐藏,我们无法移动窗体,为了使窗体可以移动,我们要为window中的布局控件添加MouseDown事件的事件处理器,并且要为其设置一个背景(window设置为允许透明,当grid没有背景时是无法触发MouseDown事件的),然后在后台添加如下的代码:

private void Grid_MouseDown(object sender, System.Windows.Input.MouseButtonEventArgs e){
if (e.ChangedButton == System.Windows.Input.MouseButton.Left)
  {
   DragMove();//window 内部的移动方法
  }
}

这样我们在Grid控件的空白区域上鼠标左键按下时,就可以拖动窗体进行移动。

Grid

下面来说一下最常用的布局控件:Grid。

它最强大的功能在于分割区域:我们可以使用Grid的ColumnDefinitions 和 RowDefinitions来分割Grid。

图片

请看上述代码,我将Grid分割了3行,3列。当值后边带" * "号时,是按比例划分,纯数字就是按像素划分,这两者是可以混用的。

拿上述例子解释说:列是1*,50像素,1*这样划分的,如果grid宽200像素,那么中间这一列是50像素,两边这两列各占剩余的二分之一,也就是75像素。行划分规则也是如此。

划分好了以后,我们在Grid子控件中就可以通过Grid.Row="index" Grid.Column="index" 来指定控件显示在哪个区域,区域的index标识是从0开始的,如果控件不指定Row和Column,则默认显示在第一行第一列:

图片

如图,我将按钮的Row和Column设置为1,也就是第二行第二列,显示效果如下:

因为只有50个像素宽,按钮是显示不全的,在开发中,为了更好的查看Grid的划分,我们可以借助Grid的bool属性ShowGridLines,让Grid显示分割线,效果如下:

这样就会很方便的调整划分大小,想查看正式效果直接将ShowGridLines去掉或改为False即可。VS是支持对WPF进行热重载的,当我们改变xaml代码,运行界面也会一并修改,但如果是引入一些新资源代码等无法实现热重载的情况,必须要重新启动程序。

StackPanel和Border

StackPanel是栈布局,放置其中的控件只能像堆碟子一样,水平排列或者垂直排列,我们可以通过其Orientation属性来设置竖排还是横排,它有两个值:Horizontal 是水平排列,Vertical 是垂直排列。

Border 常用于简单的布局,它的内部只允许有一个直接子控件,一般用于包裹Grid,对Grid加一些边框性的美化,实际上它的名字就告诉了我们它的用途。

XAML一些控件的使用的更多相关文章

  1. 自学WPF之XAML(二)控件

    摘自<深入浅出WPF>. 在WPF中是数据驱动UI,数据是核心,是主动的,UI从属于数据,并表达数据,是被动的.UI是展示给用户操作的.响应UI操作的元素是控件(control).下面是我 ...

  2. XAML常用控件2

    这节继续讲一些xaml中的常用控件. 布局控件 除了我们之前讲过的Grid,StackPanel,Border布局控件,xaml中还有如下几个布局控件: Canvas:使用这个布局,可以通过坐标来控制 ...

  3. windows10UWP:如何在xaml中设置控件为 public ?

    windows10UWP中,由于使用页面导航,操作在不同一个页面的控件需求经常遇到. 如果要对另一个page里面的控件进行操作,那么这个控件必须设置为 public .在 xaml 设置控件的方法是: ...

  4. 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件增加了 PlaceholderText 属性

    [源码下载] 重新想象 Windows 8.1 Store Apps (77) - 控件增强: 文本类控件的增强, 部分控件增加了 Header 属性和 HeaderTemplate 属性, 部分控件 ...

  5. WP8.1学习系列(第十一章)——中心控件Hub开发指南

    在本文中 先决条件 什么是中心控件? 添加中心控件 将分区添加到中心 添加交互式分区头用于导航 将展示磁贴添加到中心 使用窄应用中的垂直中心 借助中心使用语义式缩放视图 摘要和后续步骤 重要的 API ...

  6. windows phone控件

    常用控件: 包括: Button控件.CheckBox控件.HyperlinkButton控件.Iamege控件.ListBox控件.PasswordBox控件.ProgressBar控件.Radio ...

  7. wpf控件开发基础(5) -依赖属性实践

    原文:wpf控件开发基础(5) -依赖属性实践 知识回顾 接上篇,回顾这三篇讲了什么东西 首先说明了属性的现存问题,然后介绍了依赖属性的基本用法及其解决方案,由于依赖属性以静态属性的方式存在,进而又介 ...

  8. WPF ContextMenu+VisualTreeHelper实现删除控件操作

    <UserControl  MouseRightButtonDown="UserControl_MouseRightButtonDown" >    <UserC ...

  9. 2018-10-22-win10-uwp-自定义控件入门

    title author date CreateTime categories win10 uwp 自定义控件入门 lindexi 2018-10-22 09:47:54 +0800 2018-10- ...

随机推荐

  1. Python-celery的使用

    安装:pip install celery pip install eventlet 需要提前安装redis. (Download, extract and compile Redis with: $ ...

  2. 利用别名切换索引流程Elasticsearch 7.7

    背景 公司里面现在有es集群,由于时间过长,es集群中的某个索引过大但是未删除,一直在写入的情况下,昨天写入突然停止了,发现是索引超时的问题,这时想到通过创建一个新的索引来进行索引切换 操作 es 集 ...

  3. [矩阵乘法]裴波拉契数列III

    [ 矩 阵 乘 法 ] 裴 波 拉 契 数 列 I I I [矩阵乘法]裴波拉契数列III [矩阵乘法]裴波拉契数列III Description 求数列f[n]=f[n-1]+f[n-2]+1的第N ...

  4. element Notification 通知文字换行小技巧

    this.$notify({ title: "通知", message: res.result, iconClass: "el-icon-bell",//自定义 ...

  5. 设计原则:单一职责(SRP)原则

    1 什么是单一职责(SRP)原则 单一职责原则的英文是 Single Responsibility Principle,缩写为 SRP.翻译过来就是:一个类或者模块只负责完成一个职责(或者功能). 所 ...

  6. OO第二单元——电梯作业总结

    前言 本单元作业主要以设计电梯来实现多线程编程.本章主要学习了如何使用多线程以及如何确保多线程安全,从电梯的调度策略中学会了如何简单地使用synchronized锁来控制线程安全. 首先,明确锁的两个 ...

  7. OOUnit1Summary

    一.前三次作业内容分析 前言 第一单元的作业以表达式求导为主题,分三次要求逐步增加,难度逐步提高.这三次作业下来,本人既有收获,也有遗憾,因此通过接下来的内容对我这三次作业进行分析和总结,希望能能为我 ...

  8. (十二)struts2的类型转换

    所有的MVC框架,都属于表现层的解决方案,都需要负责收集用户请求参数,并将请求参数传给应用的控制器组件. 这时问题出现了,所有的请求参数都是字符串类型数据,因此MVC框架必须具备将这些字符串请求参数转 ...

  9. 算法图解...pdf

    电子书资源:算法图解 书籍简介   本书示例丰富,图文并茂,以让人容易理解的方式阐释了算法,旨在帮助程序员在日常项目中更好地发挥算法的能量.书中的前三章将帮助你打下基础,带你学习二分查找.大O表示法. ...

  10. 手把手教你SonarQube入门安装与使用

    简介 Sonar (SonarQube)是一个开源平台,用于管理源代码的质量. Sonar 不只是一个质量数据报告工具,更是代码质量管理平台. 支持Java, C#, C/C++, PL/SQL, C ...