WPF布局控件AvalonDock介绍以及应用中遇到的一个问题
在使用OpenExpressApp框架工作中,我们将开源的AvalonDock控件作为界面布局来应用。
AvalonDock是在codeplex上的一个开源项目,专门用于WPF的界面布局,可以做成类似visual studio这样的界面,个人感觉是相当不错的,而且简单易用。 像下面这样的界面用AvalonDock很快就能做出来:
有兴趣的话,大家可以去codeplex上下载源代码和例子, 相信很快就能学会。但是本文的重点不在这里,我要说的是在使用AvalonDock时遇到的一个问题。先来看下需求吧,其实很简单,我就是想点击一个按钮能弹出泊靠在底部的DockablePane。效果如下:
点击前:
点击后:
我的代码如下,XAML:
<ad:DockingManager x:Name="dockManager">
<ad:ResizingPanel Orientation="Vertical">
<ad:ResizingPanel Orientation="Horizontal">
<ad:DocumentPane x:Name="documentsHost">
<ad:DocumentContent Title="File1.doc">
<RichTextBox/>
</ad:DocumentContent>
<ad:DocumentContent Title="File2.doc">
<Button x:Name="btn1" Click="btn1_Click" Content="click" Width="300" Height="50" ></Button>
</ad:DocumentContent>
</ad:DocumentPane>
</ad:ResizingPanel>
<ad:DockablePane ad:ResizingPanel.ResizeHeight="200" x:Name="pane"/>
</ad:ResizingPanel>
</ad:DockingManager>
</Grid>
对应的CS文件:
{
DockableContent dc = new DockableContent();
TextBox tb = new TextBox();
dc.Content = tb;
dc.HideOnClose = true;
dc.Title = "Test";
this.pane.Items.Add(dc);
this.dockManager.Show(dc);
}
写完运行,点击按钮,但是却一点儿反应都没有。更奇怪的是,当我拖动窗体的边框时,DockablePane自己却跳出来了。难道说DockablePane信春哥,原地复活么~
其实玄机就出在Show方法上,打开源代码,发现Show方法的末尾是这样写的:
dockParent.Anchor == AnchorStyle.Left || dockParent.Anchor == AnchorStyle.Right))
{
ResizingPanel.SetResizeWidth(dockParent, new GridLength(200));
ResizingPanel.SetEffectiveSize(dockParent, new Size(200, 0.0));
}
else if (content.ActualWidth == 0.0 && (
dockParent.Anchor == AnchorStyle.Left || dockParent.Anchor == AnchorStyle.Right))
{
ResizingPanel.SetResizeWidth(dockParent, new GridLength(200));
ResizingPanel.SetEffectiveSize(dockParent, new Size(200, 0.0));
}
相信大家一眼就能看出来,if语句中的两个条件完全一样,而且执行的语句块也是一摸一样。问题就出在这里,AnchorStyle枚举总共有5个值(Top,Bottom,None,Left,Right),我调用的是一个参数的Show方法,默认的AnchorStyle是AnchorStyle.None,而且我的需求是底部,就算给也应该是AnchorStyle.Bottom。所以说修改如下:
dockParent.Anchor = desideredAnchor;
if (content.ActualWidth == 0.0 && (dockParent.Anchor!=AnchorStyle.None))
{
ResizingPanel.SetResizeWidth(dockParent, new GridLength(200));
ResizingPanel.SetEffectiveSize(dockParent, new Size(200, 0.0));
}
现在点击按钮,DockablePane就如约而至了。但是其实还是有问题,就是我在调用Show方法的时候就要这么this.dockManager.Show(dc,DockableContentState.Docked,AnchorStyle.Bottom);
但是当我改为Top,Left,Right时,期望出现对应的效果,但是最终仍然出现在了底部。而且当我给None的时候,表面上看DockablePane没有弹出来,但是一旦拖动窗体大小,就又出来了。还有ResizingPanel.SetEffectiveSize(dockParent, new Size(200, 0.0));似乎没起到作用,我把它注释掉,依然能弹出DockablePane,我再好好琢磨一下,希望能看到本质,这里先把这个问题提出来,我研究完了再来跟大家分享,大家有兴趣的话一起研究下~
转载于:https://www.cnblogs.com/1231net/archive/2009/12/14/1623424.html
WPF布局控件AvalonDock介绍以及应用中遇到的一个问题相关推荐
- WPF布局控件与子控件的HorizontalAlignment/VerticalAlignment属性之间的关系
WPF布局控件与子控件的HorizontalAlignment/VerticalAlignment属性之间的关系: 1.Canvas/WrapPanel控件: 其子控件的HorizontalAlign ...
- WPF 基本控件的介绍
1.Border 放到其他控件内部,给其他控件画边框,其他容器必须支持双标签. 2.Button 按钮,按钮用图片应该设置内容为Image,而不能设置BackGroud为Image,如果 只设置背景, ...
- WPF布局控件Grid的基本使用 - 使用kaxaml
Grid是以表格形式组织控件的一种布局方式: WPF中的Grid的每一个单元格中可以放置一个或多个控件: WPF中的Grid支持单元格的合并: Grid中的行和列可以自定义高度(Height)和宽度( ...
- WPF布局控件之WrapPanel
WrapPanel WrapPanel,英文意思是折叠容器,那到底是怎么个折叠法呢?如下: <Window x:Class="LearnLayout.WrapPanelWin" ...
- WPF布局控件之StackPanel
StackPanel Stack,英文意思是堆栈,StackPanel,意思是堆栈式布局,相当于把控件给堆起来.如果不设置StackPanel中控件的宽高,那么其中控件的宽高是默认和StackPane ...
- mfc在调整界面时左边的控件会丢失_Qt项目中如何完成一个漂亮的界面
在Qt项目开发过程中,如何实现做出漂亮的界面呢? 一般来说,一个界面的完成是美工.开发者和用户共同完成的.美工完成UI设计,开发者完成实现,用户对UI提出修改意见.本文主要来探讨一下如何从UI设计到交 ...
- 【愚公系列】2023年07月 WPF+上位机+工业互联 002-WPF布局控件
文章目录 前言 一.WPF布局控件 1.无边框设计 2.理解布局 2.1 WPF的布局处理 2.1 布局原则 2.3 布局过程 3.布局控件 3.1 Grid控件 3.1.1 属性 3.1.2 案例 ...
- C# .NET 6.0已经取消了Framework 4.8的WebBrowser控件,几款NuGet中的浏览器控件介绍
即使在C# .NET 6.0..NET 7.0在选择工具箱项COM组件添加Microsoft Web Browser,工具箱也没有WebBrowser控件. WebBrowser控件: WebBrow ...
- wpf初学者-wpf控件简单介绍
本文大纲 1.基本控件介绍与用法. 基本控件介绍与用法 文本控件 Label控件 label控件:一般用户描述性文字显示. 在Label控件使用时,一般给予用户提示.用法上没有什么很特殊的,label ...
最新文章
- 拖放 DataGrid 列--来自MSDN
- Mac 技术篇-查看python安装位置,查看java安装位置
- 在VC中如何找到崩溃的源头
- 11.17 模拟:总结
- sqlserver拼接字符串换行_1.3【Python】第三章 字符串
- 大厂HR年底绷不住了:怎么招程序员这么难,尤其搞这项技术的!!
- 蚂蚁区块链正式升级为蚂蚁链:首次公布“日活”超1亿
- Java中Double保留后小数位的几种方法
- 如果你选择城市创业的话,可以先从小本生意做起
- LeetCode 153. 寻找旋转排序数组中的最小值(二分)
- mysql卸载rpm包_mysql彻底卸载(rpm安装包)
- Android——eclipse下运行android项目报错 Conversion to Dalvik format failed with error 1解决...
- 编程珠玑Column11中插入排序和快排序
- twitter关注排行榜
- 什么是跨域?怎么解决跨域问题
- 家用计算机中的内存大约多少,64gb内存能装多少东西_64gb内存有多大-系统城
- win11电脑所有的浏览器都上不了网怎么解决
- 强大的文字处理器——Nisus Writer Pro
- 蓝奏云密码破解软件v1.0
- Android,开源还是封闭?VS 关于 Linux “踢出” Android
热门文章
- 用python做逻辑回归_python实现逻辑回归
- Selenium自动化测试-3.元素定位(3)
- import 导入和from导入的区别
- Filecoin网络存储容量已达3 EB
- 医药/医疗/互联网医疗服务平台/问诊/挂号/开药/处方/医生/医院/问诊订单管理/移动端问诊医疗系统/医生端处方开药系统/web端医药服务平台管理/axure原型/rp源文件/健康咨询/视频问诊/统计
- spring的一些概念及优点
- [BJOI2017]树的难题 点分治,线段树合并
- TStringGrid - 重绘时RECT解决一块空白区域
- 桥接设计模式(Bridge)
- [转]细说Redis监控和告警