从WPF Diagram Designer Part 2学习面板、缩略图、框线选择和工具箱

在从WPF Diagram Designer Part 1学习控件模板、移动、改变大小和旋转中介绍了图形设计器的移动、大小和旋转等功能的实现,本篇继续第二部分,学习设计面板、缩略图、框线旋转和工具箱等功能的实现。

WPF Diagram Designer - Part 2

设计面板(Designer Canvas :variable size, scrollable)

在从WPF Diagram Designer Part 1学习控件模板、移动、改变大小和旋转中的示例出来的设计器,当把设计对象拖动到DesignerCanvas边界外时,因为DesignerCanvas没有滚动条,我们会发现再也找不到这个对象了。想到解决最简单的办法就是给DesignerCanvas添加一个ScrollViewer,但是这个办法解决不了这个问题,因为当拖动到Canvas之外时,并不会出发Canvas的大小发生变化,所以仍旧没有滚动条,为了解决这个问题,我们则必须在设计对象移动和改变大小时去调整Canvas的大小。

WPF控件提供一个MeassureOverride允许控件计算希望的大小,再返回WPF框架来进行布局。我们可以在DesignerCanvas中重载这个方法来解决上面所说的问题,重载方法如下:

代码

protected override Size MeasureOverride(Size constraint)
{
  Size size = new Size();
  foreach (UIElement element in base.Children)
  {
    double left = Canvas.GetLeft(element);
    double top = Canvas.GetTop(element);
    left = double.IsNaN(left) ? 0 : left;
    top = double.IsNaN(top) ? 0 : top;
    //measure desired size for each child
    element.Measure(constraint);
    Size desiredSize = element.DesiredSize;
    if (!double.IsNaN(desiredSize.Width) && !double.IsNaN(desiredSize.Height))
    {
      size.Width = Math.Max(size.Width, left + desiredSize.Width);
      size.Height = Math.Max(size.Height, top + desiredSize.Height);
    }
  }
  //for aesthetic reasons add extra points
  size.Width += 10;
  size.Height += 10;
  return size;
}

注:当设计对象很多时,我猜测可能会有性能问题。在ZoomableApplication2: A Million Items介绍了一个可以显示百万级对象的示例,不知道能否解决这个性能问题,先把这个在这里留个足迹,以便以后可以找到

时间: 2024-09-17 04:01:37

从WPF Diagram Designer Part 2学习面板、缩略图、框线选择和工具箱的相关文章

从WPF Diagram Designer Part 3学习如何给设计器增加连接线功能

通过前面介绍的从WPF Diagram Designer Part 1学习控件模板.移动.改变大小和旋转和从WPF Diagram Designer Part 2学习面板.缩略 图.框线选择和工具箱,我们学会了如何建立图形设计器的基本移动.选择.大小.旋转.缩略图.框选等基本功能.对于建模支持来说 ,流程图是必不可少的一种图形,那么我们如何让图形设计器支持在设计对象之间画上箭头呢?本篇将介绍图形设计器中的连接. WPF Diagram Designer - Part 3 画连接线存在多种实现方式

从WPF Diagram Designer Part 1学习控件模板、移动、改变大小和旋转

由于上周主要做了项目组产品架构.给公司新员工培训以及其他会议等事情,在OpenExpressApp对建模支持的初步计划中我列了一些建模任务还没有开展,其中参考部分在以前的blog中都已经介绍了(MetaModelEngine:元模型引擎开发思路.DSM:使用MetaEdit+编写Family Tree Modeling Language.读书笔记:Visual Studio DSL工具特定领域开发指南).今天手头上没有其他重要事情了,可以开始进行学习WPF的图形设计器了,这也就是我在WPF -

wpf-WPF Diagram Designer 的线怎么拉动位置

问题描述 WPF Diagram Designer 的线怎么拉动位置 code project上的那份WPF Diagram Designer 它里面的连接线连接好后位置怎么随意拉动 求思路!!!!!

逆天通用水印支持Winform,WPF,Web,WP,Win10。支持位置选择(9个位置 ==》[X])

常用技能:http://www.cnblogs.com/dunitian/p/4822808.html#skill 逆天博客:http://dnt.dkil.net 逆天通用水印扩展篇~新增剪贴板系列的功能和手动配置,卸除原基础不常用的功能:http://www.cnblogs.com/dunitian/p/5377097.html 好几天没上QQ了,今天上了个QQ,,额....额...貌似消息还挺多,没及时回复的还请见谅~~刚好昨天无聊把水印这快封装出来了,支持图片水印,文字水印,索引图水印和

关于深度学习优化器 optimizer 的选择,你需要了解这些

在很多机器学习和深度学习的应用中,我们发现用的最多的优化器是 Adam,为什么呢? 下面是 TensorFlow 中的优化器: 详情参见:https://www.tensorflow.org/api_guides/python/train 在 keras 中也有 SGD,RMSprop,Adagrad,Adadelta,Adam 等,详情: https://keras.io/optimizers/ 我们可以发现除了常见的梯度下降,还有 Adadelta,Adagrad,RMSProp 等几种优化

WPF中使用amCharts绘制“.NET技术”股票K线图

本想自己用GDI绘图, 通过数据直接绘制一张蜡柱图, 但觉得这样子的功能比较少, 所以到网上搜索一些能画出K线图的控件. 发现DynamicDataDisplay挺好的, 在它的开发截图里也发现可以绘制蜡柱图, 但文档好像做的不是很好, 不知道怎么用它来画, 在寻找它比较好的例子的时候发现有人推荐用amCharts绘制, 所以便去看了一下, 发现挺好用的, 效果如下: 准备工作 先要去这里下载amCharts Stock Chart for WPF并解压, 新建一个WPF Project, 在T

自学加培训是你学习seo的更好选择

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 大家好,我是陈念,关于seo到底是自学好还是参加培训比较好,这个话题之前可能已经有很多前辈的们来分享过,本人今天只是通过自己身边的案例来重新聊一下seo自学还是培训的感慨吧. 在seo培训还没兴起的时候我相信大多数的朋友都还是从自学接触到seo的,在网上找各种各样的教程,看文章,看书,然后觉得自己可以开始干的时候就一头扎进去开始做,接着会遇到

深入学习网页技术CSS中选择符的应用

css|网页 一.选择符模式 模式/含义/内容描述 * 匹配任意元素.(通用选择器) E 匹配任意元素 E (例如一个类型为 E 的元素).(类型选择器) E F 匹配元素 E 的任意后代元素 F .(后代选择器) E > F 匹配元素 E 的任意子元素 F .(子选择器) E:first-child 当元素 E 是它的父元素中的第一个子元素时,匹配元素 E .(:first-child 伪类) E:link E:visited 如果 E 是一个目标还没有访问过(:link)或者已经访问过(:v

初学:认真学习网页技术CSS的选择符

css|初学|网页 通配选择符 语法: * 说明: 选定文档目录树(DOM)中的所有类型的单一对象.假如通配选择符不是单一选择符中的唯一组成,"*"可以省略.目前IE5.5+尚不支持此种选择符. 示例: *[lang=fr] { font-size:14px; width:120px; } *.div { text-decoration:none; } 类型选择符 语法: E1 说明: 以文档语言对象类型作为选择符. 示例: td { font-size:14px; width:120