AvalonDock 2.0 的简单运用

AvalonDock 2.0 的简单运用最近在研究AvalonDock的一些使用,碰到了一些问题。现在拿出来跟大家分享分享。网上找了一大把AvalonDock1.3版本的资料,弄出Demo后发现属性面板(DockableContent)设置成浮动后不能停靠其它的面板。最后只得试试AvalonDock2.0版本的,还好2.0版本没让我们失望。首先需要库文件:Xceed.Wpf.AvalonDock…

大家好,又见面了,我是你们的朋友全栈君。

     最近在研究AvalonDock的一些使用,碰到了一些问题。现在拿出来跟大家分享分享。

     网上找了一大把AvalonDock 1.3版本的资料,弄出Demo后发现属性面板(DockableContent)设置成浮动后不能停靠其它的面板。最后只得试试AvalonDock 2.0版本的,还好2.0版本没让我们失望。

     首先需要库文件:Xceed.Wpf.AvalonDock,若需要Aero或VS2010主题效果需引用Xceed.Wpf.AvalonDock.Themes.Aero或Xceed.Wpf.AvalonDock.Themes.VS2010,当然还有其它漂亮的主题可以在官网(http://avalondock.codeplex.com/)自行下载.

     首先需要在xaml文件头部引入这些dll(当然在此之前您还得把前面说到的库文件引入项目):

xmlns:avalonDock="http://schemas.xceed.com/wpf/xaml/avalondock"

     xaml布局代码:

AvalonDock 2.0 的简单运用
AvalonDock 2.0 的简单运用

 1 <avalonDock:DockingManager Grid.Row="1" x:Name="DManager">
 2         <avalonDock:DockingManager.Theme>
 3             <!--<avalonDock:AeroTheme/>-->
 4             <avalonDock:VS2010Theme/>
 5             <!--<avalonDock:ExpressionDarkTheme/>-->
 6             <!--<avalonDock:ExpressionLightTheme/>-->
 7             <!--<avalonDock:GenericTheme/>-->
 8             <!--<avalonDock:MetroTheme/>-->
 9             </avalonDock:DockingManager.Theme>
10 
11         <avalonDock:LayoutRoot>
12             <avalonDock:LayoutRoot.LeftSide  >
13                 <avalonDock:LayoutAnchorSide >
14                     <avalonDock:LayoutAnchorGroup>
15                         <avalonDock:LayoutAnchorable Title="left1" AutoHideWidth="50" ContentId="left1">
16                             <TextBox Width="80" SelectionChanged="TextBox_SelectionChanged"></TextBox>
17                         </avalonDock:LayoutAnchorable>
18 
19                         <avalonDock:LayoutAnchorable Title="left2" AutoHideWidth="20" ContentId="left2">
20                             <TextBox Width="80"></TextBox>
21                         </avalonDock:LayoutAnchorable>
22 
23                     </avalonDock:LayoutAnchorGroup>
24                 </avalonDock:LayoutAnchorSide>
25             </avalonDock:LayoutRoot.LeftSide>
26 
27             <avalonDock:LayoutPanel>
28                 <avalonDock:LayoutAnchorablePaneGroup DockWidth="100">
29                     <avalonDock:LayoutAnchorablePane>
30                         <avalonDock:LayoutAnchorable Title="text1" ContentId="text1">
31                             <TextBox  TextWrapping="Wrap" AcceptsReturn="True"></TextBox>
32                         </avalonDock:LayoutAnchorable>
33 
34                         <avalonDock:LayoutAnchorable Title="text2" ContentId="text2">
35                             <TextBox  TextWrapping="Wrap" AcceptsReturn="True"></TextBox>
36                         </avalonDock:LayoutAnchorable>
37                     </avalonDock:LayoutAnchorablePane>
38                 </avalonDock:LayoutAnchorablePaneGroup>
39 
40                 <avalonDock:LayoutDocumentPane>
41                         <avalonDock:LayoutDocument Title="document1" ContentId="doc1">
42                         <TextBox AcceptsReturn="True" TextWrapping="Wrap"></TextBox>
43                         </avalonDock:LayoutDocument>
44 
45                         <avalonDock:LayoutAnchorable Title="document2" ContentId="doc1">
46                             <TextBox AcceptsReturn="True" TextWrapping="Wrap"></TextBox>
47                         </avalonDock:LayoutAnchorable>
48                     </avalonDock:LayoutDocumentPane>
49             </avalonDock:LayoutPanel>
50         </avalonDock:LayoutRoot>
51 
52     </avalonDock:DockingManager>

View Code

 

效果:

AvalonDock 2.0 的简单运用 

 

 

 

<avalonDock:LayoutAnchorablePane>和<avalonDock:LayoutDocumentPane>我分别把它们叫做属性布局面板和文档布局面板。属性布局面板的特性是停靠在面板的边缘时可以设置自动隐藏,而且属性布局面板也可以作为一个可停靠面板供其它的属性布局面板停靠。文档布局面板只可以漂浮和停靠在主布局面板中,不可以停靠在属性布局面板里面。

 <avalonDock:LayoutAnchorablePane>和<avalonDock:LayoutDocumentPane>布局面板需要位于<avalonDock:LayoutPanel>布局面板里面,若有需要设置多个属性布局面板和文档布局面板置于一个面板组中可以分别使用<avalonDock:LayoutAnchorablePaneGroup>和 <avalonDock:LayoutDocumentPaneGroup>。

      正在承载我们内容控件的是<avalonDock:LayoutAnchorable>和<avalonDock:LayoutDocument>,我们可以在它们里面添加我们自己的内容。它们只能放在<avalonDock:LayoutAnchorablePane>和<avalonDock:LayoutDocumentPane>里面,看自己的需求可以自己组合使用。

  布局就到这里了,接下来让我们看看如何保存和恢复布局,AvalonDock 2.0提供了相应的操作类XmlLayoutSerializer,需要添加引用using Xceed.Wpf.AvalonDock.Layout.Serialization;

     cs代码:

         //保存布局
            var serializer = new XmlLayoutSerializer(DManager);
            using (var stream = new StreamWriter("lay.txt"))
                serializer.Serialize(stream);

       //恢复布局
       var serializer = new XmlLayoutSerializer(DManager);
         using (var stream = new StreamReader("lay.txt"))
          serializer.Deserialize(stream);

 

保存布局会把当前的布局(DManager)保存在文件“lay.txt”中,恢复布局会把“lay.txt”中的布局内容恢复到界面(DManager)中。这里有点必须注意,使用这个功能时必须为每个内容面板添加ContentId属性,如 <avalonDock:LayoutAnchorable Title=”left1″ AutoHideWidth=”50″ ContentId=”left1″>,否则将不能恢复。

       分享就到这里结束了,其实AvalonDock还有许多其它方面的功能,比如可以使用<avalonDock:DockingManager.AnchorableHeaderTemplate>为属性内容界面的头部自定义内容等等,水平有限,内容可能存在纰漏之处还请见谅。

 

    源代码下载

 

转载于:https://www.cnblogs.com/yangxw100/p/3341007.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/162124.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java sql拼接字符串_SQL中字符串拼接

    java sql拼接字符串_SQL中字符串拼接1.概述在SQL语句中经常需要进行字符串拼接,以sqlserver,oracle,mysql三种数据库为例,因为这三种数据库具有代表性。sqlserver:select’123’+’456′;oracle:select’123’||’456’fromdual;或selectconcat(‘123′,’456’)fromdual;mysql:selectconcat(‘123’,’…

    2022年6月16日
    100
  • 通过bindservice方法开启的服务,通过什么方法解绑_controller调用多个service

    通过bindservice方法开启的服务,通过什么方法解绑_controller调用多个service绑定本地服务AndroidManifest.xml中声明服务:&lt;serviceandroid:name=".TestLocalService"&gt;&lt;intent-filter&gt;&lt;actionandroid:name="maureen.intent.action.BIND_LOCAL…

    2022年9月18日
    0
  • pandas中的loc和iloc_pandas loc函数

    pandas中的loc和iloc_pandas loc函数pandas中索引的使用定义一个pandas的DataFrame对像importpandasaspddata=pd.DataFrame({‘A’:[1,2,3],’B’:[4,5,6],’C’:[7,8,9]},index=[“a”,”b”,”c”])dataABCa147b258c3691…

    2022年9月25日
    0
  • Python保留小数又不想四舍五入咋办?

    Python保留小数又不想四舍五入咋办?保留小数又不想四舍五入咋办?找了一会不知道用什么函数实现,突然想到可以这样…a=25.35568a=a-a%0.01print(a)

    2022年8月11日
    5
  • pycharm如何导入自定义模块_Python添加模块

    pycharm如何导入自定义模块_Python添加模块问题:明明python已经安装模块,但是在pycharm打开的项目中,导入改模块,却提示找不到改模块解决办法:需要在project中导入该模块,具体操作如下:1、点击File,选择Settings选项2、选择projectinterpreter选项,上面显示的是已安装的模块,要安装我们所需要的模块,点击右侧”+”3、搜索需要安装的模块,点击左下角的InstallPackage,等待安装,完成之后界面会提示:Package‘openpyxl’installedsuccessfully,表示

    2022年8月29日
    2
  • vue双向数据绑定的原理「建议收藏」

    vue双向数据绑定的原理「建议收藏」有关双向数据绑定的原理最近两次面试的时候,被问到了vue中双向数据绑定的原理,因为初学不精,只是使用而没有深入研究,所以答不出来。之后就在网上查找了别人写的博客,学习一下。下面是博客园一篇博客,以及MDN上讲解Object.defineProperty()方法的地址。文章链接:vue的双向绑定原理及实现Mozilla开发者服务:Object.defineProperty…

    2022年10月17日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号