自定义布局控件
讲到自定义布局控件我们必须得先谈一下在WPF中自定义控件在WPF自定义控件你可以选择下图的一些基类作为继承对象你也可以继承自已有的一些控件这个就看你的需要了。其实开发WPF自定义控件和开发WinForm、ASP.NET自定义控件基本类似只是要注意一些特别的地方比如依赖属性的处理、路由事件、视觉树和逻辑树等等。于今天只是讲如何开发一个自定义的Panel所以在清楚了基类的前提下首先得了解它有哪些属性和事件这样就可以确定哪些是不需要单独写、哪些是需要override。下图就是Panel和基类FrameworkElement 的类图在清楚了上面这张图以后我们就可以着手开始写了我们知道布局系统的工作原理是先测量后排列测量就是确定面板需要多大空间排列则是定义其面板内子元素的排列规则。自定义面板要继承自Panel类并重写MeasureOverride和rrangeOverride方法即可如下便是一个简单的自定义Panel:namespace WPFLayoutDemo { public class PlotPanel : Panel { public PlotPanel() : base() { } //重写默认的Measure方法 protected override Size MeasureOverride(Size availableSize) { Size panelDesiredSize new Size(); foreach (UIElement child in InternalChildren) { child.Measure(availableSize); panelDesiredSize child.DesiredSize; } return panelDesiredSize; } //重写默认的Arrange方法 protected override Size ArrangeOverride(Size finalSize) { foreach (UIElement child in InternalChildren) { double x 50; double y 50; child.Arrange(new Rect(new Point(x, y), child.DesiredSize)); } return finalSize; } } }控件的最终大小和位置是由该控件和父控件共同完成的,父控件会先给子控件提供可用空间availableSize,子控件再反馈给父控件一个自己的期望值DesiredSize,父控件最后根据自己所拥有的空间大小与子控件的期望值分配一定的空间给子控件并返回自己的大小.那么这个过程就是通过MeasureOverride 和ArrangeOverride这两个方法来完成注意父控件的availableSize是减去Margin、padding等的值。本来想自己开发一个较复杂的Panel控件放上来但一搜网络发现已经有很多很好的Panel控件所以在这里我也不写那么多了大家可以研究一下这些控件我也研究了几个觉得最好理解且最美观的当属“FishEyePanel FanPanel, Paul Tallett, codeproject ”,大家可以根据链接过去看一下Paul Tallett讲解得非常的细致。TreeMapPanel, Kevin Moore (see bag-o-tricks for code)AnimatingTilePanel, Kevin Moore (see bag-o-tricks for code)Disposing Virtualizing Stack Panel, Aaron, WiredPrairie.usTimeLinePanel, Rob Zelt, robzelt.com (with credit to Robert Ingebretsen and Lauren Lavoie)Chart and Lens Panel by John Stewien (code available?)DiagonalPanelFishEyePanel FanPanel, Paul Tallett, codeprojectRadiaPanel ItemsRadialPanel, Rhett log (Henry Hahn posted a Radial panel in 2005, but Im not sure if it runs or not?)DisclaimerPanel, ChazSpanningStackPanel, Nick TheusenPlotPanel, Windows SDK SampleCollapsiblePanel, Thomas LebrunCornerStacker, Nick ThuesenStickyPanel, Unni, Blend PMItemSkimmingPanel, Pavan Podila顺便也链接两幅图讲到这里我们也顺便提一下写WPF自定义控件的几个步骤以后在讲到这一节的时候会详细讲解首先你得清楚你的自定义控件是干什么用的能解决什么问题公用到什么程度其他项目也可以用、本项目用、项目当中一个模块用、只有一个地方用是继承已有的控件还是从头写对设计时是否支持样式和模板的定义等。确定好了上面的步骤后我们就可以建立项目的结构类和资源文件等该放在什么位置也就在这一步确定。选择要继承的基类UIElement、FrameworkElement 、Control 、ContentControl 、HeaderedContentControl 、ItemsControl 、Selector 、RangeBase还是已有的一些控件。重写默认的样式和新建一些样式并附默认值。由于WPF的属性基本都是依赖属性所以我们也要新建一些依赖属性。逻辑树和视觉树的一些处理以及事件等。十五.本文总结今天我们主要讲了WPF布局系统对整个布局系统的原理、各个Panel的基本用法分别用XAML和C#两种方式实现同一个功能便于大家学习以及自定义布局控件做了一些介绍由于内容太多我只是力所能及的做一些相关的介绍和演示所以只能给大家提供一个参考如果大家想了解更多还需要去看专门的教材同时有些知识也只是个人的一些见解所以大家只能将就着看了。写篇文章也是怀着技术交流的心态发布出来由于是自己对这些技术的使用总结和心得体会错误之处在所难免所以希望大家能够多多指点这样也能纠正我的错误观点以便和各位共同提高最后如果大家感兴趣可以关注WPF 基础到企业应用系列索引这个系列文章我也会不定期的逐渐更新谢谢各位的关注也欢迎和各位交流讨论。

相关新闻

Border

Border

Border 是一个装饰的控件,此控件绘制边框及背景,在 Border 中只能有一个子控件(这个子控件又可以包含多个子控件)。Border 的几个重要属性:Background:用用一个 Brush 对象来绘制背景 ;BorderBrush:用一个B…

2026/7/5 2:12:33 阅读更多 →
SRWE窗口分辨率编辑器:终极游戏截图与多屏适配解决方案

SRWE窗口分辨率编辑器:终极游戏截图与多屏适配解决方案

SRWE窗口分辨率编辑器:终极游戏截图与多屏适配解决方案 【免费下载链接】SRWE Simple Runtime Window Editor 项目地址: https://gitcode.com/gh_mirrors/sr/SRWE SRWE(Simple Runtime Window Editor)是一款功能强大的开源窗口分辨率自…

2026/7/5 2:10:33 阅读更多 →
qt的元对象系统有哪些组成,为什么要有元对象系统

qt的元对象系统有哪些组成,为什么要有元对象系统

豆包生成

2026/7/5 2:08:32 阅读更多 →

最新新闻

网购翡翠耳饰必看!3步5分钟验货法,避免踩坑吃哑巴亏

网购翡翠耳饰必看!3步5分钟验货法,避免踩坑吃哑巴亏

网购翡翠耳饰最怕踩坑:盯着商家精修仙图下单,收货却发现色差离谱、藏着暗裂,等反应过来早过了退货时效,只能吃哑巴亏。其实只要掌握3步快速验货法,就能把退货主动权握在手里,像媞姿翡翠耳饰直播间里主播反复…

2026/7/5 3:10:56 阅读更多 →
生命涌现的小龙虾技能之【Acquaintance Recognition  Analysis Skill | 熟人识别分析技能】简介

生命涌现的小龙虾技能之【Acquaintance Recognition Analysis Skill | 熟人识别分析技能】简介

👥 Acquaintance Recognition & Analysis Skill | 熟人识别分析技能 智能分析中枢 图片/视频智能分析 结构化报告 历史报告云端查询 🧭 技能概览 | Overview 模块内容🏷️ 技能名称熟人识别分析技能🎯 核心目标熟人识别分…

2026/7/5 3:10:56 阅读更多 →
基于DGN的电工基础-5

基于DGN的电工基础-5

第 5 部分 集成运算放大器及其信号运算和处理电路5.1 运算放大器的简单介绍5.1.1 集成运放的组成5.1.2 理想运算放大器及其分析依据5.2 运算放大器在信号运算方面的应用5.2.1 比例运算5.2.2 加法运算5.2.3 减法运算电路5.2.4 积分运算电路5.2.5 微分运算电路5.3 运算放大电路中…

2026/7/5 3:08:56 阅读更多 →
全场景地下水环境影响评价建模、软件应用与案例

全场景地下水环境影响评价建模、软件应用与案例

专题一、地下水基础知识学习 [1]地下水的不同赋存类型 潜水/承压水;孔隙水/裂隙水/岩溶水 [2]地下水相关参数 渗透系数;给水度;贮水系数;弥散度 [3]地下水运动的基本规律 二维/三维水流连续性方程 各类边界条件介绍 [4] 溶…

2026/7/5 3:08:56 阅读更多 →
LC709204V高精度电池电量监测方案解析

LC709204V高精度电池电量监测方案解析

1. 项目背景与核心需求在便携式设备和物联网终端中,精确估算电池剩余电量(RSOC)一直是个技术难点。传统电压检测法误差高达20%,而库仑计数需要复杂的校准。LC709204V这颗来自onsemi的芯片,配合MKV42F256VLH16微控制器&…

2026/7/5 3:08:56 阅读更多 →
符合出口标准的胡萝卜种子如何挑选抗逆品种?2026 种植采购实操指南

符合出口标准的胡萝卜种子如何挑选抗逆品种?2026 种植采购实操指南

很多从事胡萝卜规模化种植,特别是瞄准出口市场的技术负责人和种植户,经常面临一个核心困境:如何在海量的种子品种中,精准筛选出兼具抗逆性、商品性和高产潜力的品种,并构建一套可复制的稳产方案?市面上的营…

2026/7/5 3:04:55 阅读更多 →

日新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/5 0:03:34 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/5 0:03:34 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/5 0:07:38 阅读更多 →

月新闻