public class NavigationPanel:Panel
{
protected override Size MeasureOverride(Size availableSize)
{
Size size = new Size();
for (int i = ; i < this.InternalChildren.Count; i++)
{
var child = this.InternalChildren[i];
child.Measure(availableSize);
size = child.DesiredSize;
}
return base.MeasureOverride(size);
} protected override Size ArrangeOverride(Size finalSize)
{
var thisWidth = finalSize.Width;
for (int i = ; i < this.InternalChildren.Count; i++)
{
var child = this.InternalChildren[i];
var poingX = thisWidth - child.DesiredSize.Width;
if (poingX > )
{
child.Arrange(new Rect(new Point(poingX, ), child.DesiredSize));
}
else
{
child.Arrange(new Rect(new Point(, ), child.DesiredSize));
}
}
return base.ArrangeOverride(finalSize);
}
}
<local:NavigationPanel x:Name="_navigationpanel_" Width="60" MaxWidth="300" Background="Yellow" HorizontalAlignment="Left">
<Button BorderBrush="Black" Background="Red" Content="0" Width="40" Margin="10" Click="Button_Click"></Button>
</local:NavigationPanel>
 private void Button_Click(object sender, RoutedEventArgs e)
{
if (_navigationpanel_.Width == ) _navigationpanel_.Width = ; else _navigationpanel_.Width = ; }

当然这只是个半成品,还可以向NavigationPanel中加入子控件来做一个完整的导航。

用MeasureOverride和 ArrangeOverride做导航最大的好处是:

1、在控件的最上层

2、可以随着窗体大小来调整Height

导航实现方式有很多,这个纯粹是为了MeasureOverride和 ArrangeOverride 练手。

WPF MeasureOverride和 ArrangeOverride做个 页面导航的更多相关文章

  1. WPF的页面导航

    工作中之前接触过的WPF程序一直是使用TabControl作不同页面间的切换,每个Tab负责独立的功能,清晰简捷,所以一直就没有动力研究WPF自带的页面导航.(虽然接触过使用页面导航的WPF项目,也并 ...

  2. 对WPF中MeasureOverride 和ArrangeOverride 浅理解

    以前对MeasureOverride 和ArrangeOverride十分费解,看到了这篇博文茅塞顿开~ public class CustomControl1 : Panel { /// <s ...

  3. WPF MvvmLight简单实例(1) 页面导航

    原文:WPF MvvmLight简单实例(1) 页面导航 实现了那些功能,先看看截图: 操作描述: 在程序运行后,点击“Load”按钮,页面会加载PageOne,点击PageOne页面中的“Next” ...

  4. Windows Phone 8.1 新特性 - 页面导航

    本篇介绍一下Windows Phone 8.1 中页面导航的实现方式. 大家对Windows Phone 8 中页面导航的实现一定不陌生,我们使用 NavigationService 来实现.具体写法 ...

  5. 【Win10】页面导航的实现

    注:本文基于 Windows 10 10240 及其 SDK 编写,若以后有变化,请以新版本为准. 页面导航我们是再熟悉不过了,浏览器.手机 App 大多都使用这种方式来展示内容.在 Windows ...

  6. 与众不同 windows phone (27) - Feature(特性)之搜索的可扩展性, 程序的生命周期和页面的生命周期, 页面导航, 系统状态栏

    原文:与众不同 windows phone (27) - Feature(特性)之搜索的可扩展性, 程序的生命周期和页面的生命周期, 页面导航, 系统状态栏 [索引页][源码下载] 与众不同 wind ...

  7. Win10系列:JavaScript页面导航

    页面导航是在开发应用的过程中使用频率较高的技术,其中比较常用的导航方式有多页导航和页内导航,采用多页导航方式的应用程序包含一系列的页面,在一个页面中加入另一个页面的链接地址后,单击链接将跳转到指定页面 ...

  8. MeasureOverride 和 ArrangeOverride

    原文:MeasureOverride 和 ArrangeOverride FrameworkElement.MeasureOverride方法实现当在派生类中重写时,测量子元素在布局中所需的大小,然后 ...

  9. 从零学React Native之03页面导航

    之前我们介绍了RN相关的知识: 是时候了解React Native了 从零学React Native之01创建第一个程序 从零学React Native之02状态机 本篇主要介绍页面导航 上一篇文章给 ...

随机推荐

  1. datagrid 扩展 页脚 合计功能

    效果图:合计信息展示在页脚中(showFooter:true) code: <!DOCTYPE html> <html> <head> <meta chars ...

  2. java调用第三方包的例子

    第三方包路径 D:\jp\log4j\log4j-1.2.16.jar 代码D:\jp\log4j\Log4jDemo.java import org.apache.log4j.*; public c ...

  3. 连接db2数据库出现No buffer space available (maximum connections reached?)

    Caused by: javax.naming.NamingException: [jcc][t4][2043][11550][3.57.82] 异常 java.net.SocketException ...

  4. gunicorn配置文件

    最近使用gunicorn部署,感觉用命令参数方式启动比较繁琐,而且有时候就忘了以前怎么设置的了.一笑... 上stackoverflow查了查,找到了一个官方示例,在这里. 官方解释在这里. 记在这里 ...

  5. 移动端Android软键盘遮住输入框解决!

    在使用vue的情况下,在输入框中添加 <textarea class="textarea" @click="isAndroid" :maxlength=& ...

  6. Mybatis在oracle数据库中插入数据后返回自增值ID

    1.将id设置成自增序列 CREATE OR REPLACE TRIGGER "DATALIB"."TRIG_USER_ADD" BEFORE INSERT O ...

  7. centos 下备份oracle数据

    一.在xshell下root用户登录服务器 1.新建oracle数据库备份目录 mkdir -p /casnw/backup/oradata6910bak 2.设置目录权限为oinstall用户组的o ...

  8. linux下的wireshark最新版安装(源码安装)以及一些常见问题

    源码安装教程 http://www.cnblogs.com/littleTing/p/3765589.html 1.下载wireshark: 网址:http://www.wireshark.org/d ...

  9. excel2007自定义菜单项学习

    参考: http://club.excelhome.net/thread-1288002-1-1.html http://club.excelhome.net/thread-709306-1-1.ht ...

  10. java 冒泡排序 二分查找 选择排序 插入排序

    下面这个程序是先定义一个整型数组,然后将其中的元素反序赋值,再用冒泡排序进行排序以后用二分查找来查找其中是否有某个数,返回值为-1时表示这个数可能小于这个数组的最小值或大小这个数组的最大值,-2表示这 ...