概述

如果说界面设计,那么自适应问题一定无法避免,今天就来分享一下,wpf如何实现自适应,先看一下效果:(文末添加源代码下载)

   

思路

基本思路就是用 Grid 的网格,进行宽度的自动填充适应,  不过对于复杂的页面,布局起来可能比较麻烦, 这里推荐结合 DockPanel 和 Grid 一起使用,对于页面一些不需要自适应的模块,可以采用 DockPanel.Dock="Top/Left/Right/Bottom",   对于需要自适应的部分(一般都是界面中间的主体部分), 采用DockPanel自动填充,  然后再内部应用grid 网格布局。   这样可以把大面积的界面拆分开来,   降低复杂度。

实现

关于文章开头图中的样式    先用DockPanel 将内容拆分为上下两部分,上部对于TextBox, Button应用Grid,定义行列赋值为*,  即可实现宽度自动平均分配, 如果想实现1:1:2的效果,可以设置为*,*,2*,具体应用可参考下面代码。

  1. <Grid>
  2. <Grid.RowDefinitions>
  3. <RowDefinition Height="*"/>
  4. <RowDefinition Height="*"/>
  5. <RowDefinition Height="*"/>
  6. </Grid.RowDefinitions>
  7. <Grid Grid.Row="">
  8. <Border BorderBrush="CadetBlue" BorderThickness="">
  9. <TextBlock TextAlignment="Center" FontSize="" Text="王者农药"/>
  10. </Border>
  11. </Grid>
  12. <Grid Grid.Row="">
  13. <Grid.ColumnDefinitions>
  14. <ColumnDefinition Width="*"/>
  15. <ColumnDefinition Width="*"/>
  16. <ColumnDefinition Width="3*"/>
  17. </Grid.ColumnDefinitions>
  18. <Grid Grid.Column="">
  19. <Border BorderBrush="Red" BorderThickness="">
  20. <TextBlock TextAlignment="Center" FontSize="" Text="推塔"/>
  21. </Border>
  22. </Grid>
  23. <Grid Grid.Column="">
  24. <Border BorderBrush="Yellow" BorderThickness="">
  25. <TextBlock TextAlignment="Center" FontSize="" Text="竞技"/>
  26. </Border>
  27. </Grid>
  28. <Grid Grid.Column="">
  29. <Border BorderBrush="Blue" BorderThickness="">
  30. <TextBlock TextAlignment="Center" FontSize="" Text="王者不可阻挡"/>
  31. </Border>
  32. </Grid>
  33. </Grid>
  34. <Grid Grid.Row="">
  35. <Grid.ColumnDefinitions>
  36. <ColumnDefinition Width="*"/>
  37. <ColumnDefinition Width="*"/>
  38. </Grid.ColumnDefinitions>
  39. <Grid Grid.Column="">
  40. <Button Background="MediumSpringGreen" FontSize="" Content="匹配"/>
  41. </Grid>
  42. <Grid Grid.Column="">
  43. <Button Background="Coral" FontSize="" Content="排位"/>
  44. </Grid>
  45. </Grid>
  46. </Grid>

DataGrid的特殊处理

对于下半部分的DataGrid可能相对复杂,不但要设置  ColumnWidth="Auto",  还要在后端添加如下代码来重新计算并更新列宽度:

  1. DataGridHeroList.Loaded += (s, e) =>
  2. {
  3. DataGridHeroList.Columns.AsParallel().ForEach(column =>
  4. {
  5. column.MinWidth = column.ActualWidth;
  6. column.Width = new DataGridLength(, DataGridLengthUnitType.Star);
  7. });
  8. };

下载

如有任何疑问,欢迎留言,一起讨论~~

示例代码下载     链接: https://pan.baidu.com/s/1boZCKLx

密码: fsq5

WPF控件自适应屏幕的更多相关文章

  1. C# WinForm窗体及其控件自适应各种屏幕分辨率

    C# WinForm窗体及其控件自适应各种屏幕分辨率 一.说明  我们自己编写程序的界面,会遇到各种屏幕分辨率,只有自适应才能显的美观.实际上,做到这点也很简单,就是首先记录窗体和它上面控件的初始位置 ...

  2. 【IOS界面布局】横竖屏切换和控件自适应(推荐)

    [IOS界面布局]横竖屏切换和控件自适应(推荐) 分类: [MAC/IOS下开发]2013-11-06 15:14 8798人阅读 评论(0) 收藏 举报 横竖屏切换 自适应 第一种:通过人为的办法改 ...

  3. WPF 控件库——仿制Chrome的ColorPicker

    WPF 控件库系列博文地址: WPF 控件库——仿制Chrome的ColorPicker WPF 控件库——仿制Windows10的进度条 WPF 控件库——轮播控件 WPF 控件库——带有惯性的Sc ...

  4. 浅尝辄止——使用ActiveX装载WPF控件

    1 引言 使用VC编写的容器类编辑器,很多都可以挂接ActiveX控件,因为基于COM的ActiveX控件不仅封装性不错,还可以显示一些不错的界面图元. 但是随着技术不断的进步,已被抛弃的Active ...

  5. XMAL语法系列之-(2)---WPF控件继承图

    WPF控件继承图 1 FrameworkElement 1.1 Panel(面板类元素) 1.1.1 Canvas 1.1.2 DockPanel 1.1.3 Grid 1.1.4 TabPanel ...

  6. 通过WinForm控件创建的WPF控件无法输入的问题

    今天把写的一个WPF程序发布到别的机器上执行,发现一个比较奇怪的问题:在那个机器上用英文输入法无法输入数字,非要切换到中文输入法才行:但在我的机器上却是好好的. 最开始以为是输入法的问题,弄了好一阵子 ...

  7. WPF控件--利用Winform库中的NotifyIcon实现托盘小程序

    WPF控件--NotifyIcon   运行界面如下所示:            图1                                             图2 代码很少,如下所示 ...

  8. (转)WPF控件开源资源

    (转)WPF控件开源资源 Textbox Drag/Drop in WPFhttp://www.codeproject.com/Articles/42696/Textbox-Drag-Drop-in- ...

  9. WPF控件模板

    引言:在进行WPF项目开发过程中,由于项目的需要,经常要对某个控件进行特殊的设定,其中就牵涉到模板的相关方面的内容.本文也是在自己进行项目开发过程中遇到控件模板设定时集中搜集资料后整理出来的,以供在以 ...

随机推荐

  1. python+selenium自动化软件测试(第7章):Page Object模式

    什么是Page ObjectModel模式Page Objects是selenium的一种测试设计模式,主要将每个页面看作是一个class.class的内容主要包括属性和方法,属性不难理解,就是这个页 ...

  2. Keep in Mind

    Do not undermine your worth by comparing yourself with others.It is because we are different and eac ...

  3. Markdown最佳实践

    Markdown 最佳实践 结合目前看到的信息,总结使用Markdown的最方便的方式. 我的需求是: 能够配合各种笔记软件使用,目前主要使用的是为知笔记和有道笔记.笔记的内容需要记录代码及数学公式, ...

  4. Ext:ComboBox实战

    var gsCombo = new Ext.form.ComboBox({ id:'combo', hiddenName:'value', fieldLabel:'下拉框', triggerActio ...

  5. 【搬运工】之——Selenium+IDEA+Maven+TestNG环境搭建(转)

    Selenium+IDEA+Maven+TestNG环境搭建 第一 安装java环境. 1. 下载并安装Jdk1.7或Jdk1.8 http://www.oracle.com/technetwork/ ...

  6. 高性能消息队列 CKafka 核心原理介绍(上)

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:闫燕飞 1.背景 Ckafka是基础架构部开发的高性能.高可用消息中间件,其主要用于消息传输.网站活动追踪.运营监控.日志聚合.流式 ...

  7. Httpservlet 获取json对象字符窜

    使用的是google 的json转换jar import com.google.gson.JsonObject;import com.google.gson.JsonParser; import or ...

  8. 详解 mpls vpn 的实现

    MPLS VPN的实现 一.实验目的 该实验通过MPLS VPN的数据配置,使学生掌握路由器相关接口的IP地址设置.路由协议的配置以及MPLS VPN的完整的创建过程, 从而加深对IP网络的IP编址. ...

  9. 吐槽下微软的vs code编辑器

    缺点:不能同时打开多个文件夹(打开多个文件夹得先ctrl+shift+N窗口或者除非你的所有项目文件都在同一个文件夹目录下) 优点是支持用户设置以及提供很多插件 // 将设置放入此文件中以覆盖默认设置 ...

  10. Vuforia开发完全指南---Vuforia概述

    Vuforia概述 AR(Augmented Reality)增强现实,想必大家都已经很熟悉了.这是当下最热的技术之一,是利用计算机视觉和计算机图像学领域的相关知识将虚拟世界融入到现实生活当中.AR和 ...