WPFAvalonDock基本用法

来源:互联网 发布:域名代表什么 编辑:程序博客网 时间:2024/05/20 05:06

本文简单介绍AvalonDock2.0基本用法,下载AvalonDock 2.0dll及主题http://avalondock.codeplex.com/

AvalonDock基本类介绍

DockingManager:停靠管理类,xaml中AvalonDock的根节点

LayoutRoot:布局根节点,有四个属性LeftSide,RightSide,TopSide,ButtomSide展示四个位置的内容

LayoutPanel:布局面板类,可有多个LayoutGroup,实际的窗格都位于LayoutPanel节点下

LayoutAnchorablePaneGroup:可停靠窗格组类

LayoutDocumentPaneGroup:文档窗格组类

LayoutAnchorablePane:可停靠窗格类

LayoutDocumentPane:文档窗格类

LayoutAnchorable:可停靠内容类

LayoutDocument:文档内容类

xaml布局代码


<Window x:Class="AvalonDockTest.MainWindow"        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"        xmlns:avalondock="http://schemas.xceed.com/wpf/xaml/avalondock"        Title="MainWindow" Height="350" Width="525">    <Grid>        <Grid.RowDefinitions>            <RowDefinition Height="auto"/>            <RowDefinition></RowDefinition>        </Grid.RowDefinitions>        <Menu Margin="0" HorizontalAlignment="Left" Name="menu1" VerticalAlignment="Top">            <MenuItem Header="恢复布局" Click="MenuItem_Click"/>            <MenuItem Header="断点窗口" Click="MenuItem_Click_1"/>        </Menu>        <avalondock:DockingManager x:Name="dockingmanger" Grid.Row="1">            <avalondock:DockingManager.Theme>                <avalondock:VS2010Theme/>            </avalondock:DockingManager.Theme>                        <avalondock:LayoutRoot>                <avalondock:LayoutRoot.LeftSide>                    <avalondock:LayoutAnchorSide>                        <avalondock:LayoutAnchorGroup>                            <avalondock:LayoutAnchorable Title="资源管理器" AutoHideHeight="50" ContentId="l1">                                <TextBox Width="80" SelectionChanged="TextBox_SelectionChanged"/>                            </avalondock:LayoutAnchorable>                            <avalondock:LayoutAnchorable Title="数据库" AutoHideHeight="50" ContentId="l2">                                <TextBox Width="80" SelectionChanged="TextBox_SelectionChanged"/>                            </avalondock:LayoutAnchorable>                        </avalondock:LayoutAnchorGroup>                    </avalondock:LayoutAnchorSide>                   </avalondock:LayoutRoot.LeftSide>                                <avalondock:LayoutRoot.BottomSide>                    <avalondock:LayoutAnchorSide>                        <avalondock:LayoutAnchorGroup x:Name="buttomgroup">                            <avalondock:LayoutAnchorable Title="输出" ContentId="t1">                                <TextBox TextWrapping="Wrap" AcceptsReturn="True"></TextBox>                            </avalondock:LayoutAnchorable>                            <avalondock:LayoutAnchorable Title="错误" ContentId="t2">                                <TextBox TextWrapping="Wrap" AcceptsReturn="True"></TextBox>                            </avalondock:LayoutAnchorable>                        </avalondock:LayoutAnchorGroup>                    </avalondock:LayoutAnchorSide>                </avalondock:LayoutRoot.BottomSide>                                <avalondock:LayoutPanel>                    <avalondock:LayoutDocumentPane>                        <avalondock:LayoutDocument Title="MainWindow.xaml" ContentId="d1">                            <TextBox AcceptsReturn="True" TextWrapping="Wrap"></TextBox>                        </avalondock:LayoutDocument>                        <avalondock:LayoutDocument Title="MainWindow.xaml.cs" ContentId="d2">                            <TextBox AcceptsReturn="True" TextWrapping="Wrap"></TextBox>                        </avalondock:LayoutDocument>                    </avalondock:LayoutDocumentPane>                </avalondock:LayoutPanel>            </avalondock:LayoutRoot>        </avalondock:DockingManager>            </Grid></Window>

动态改变

        private void MenuItem_Click_1(object sender, RoutedEventArgs e)        {            try            {                LayoutAnchorable la = new LayoutAnchorable();                la.Title = "断点";                la.Content = new TextBox();                buttomgroup.Children.Add(la);            }            catch(Exception ex)            {                MessageBox.Show(ex.ToString());            }        }

保存布局

            var serializer = new XmlLayoutSerializer(dockingmanger);            using(var stream = new StreamWriter("layout.xml"))            {                serializer.Serialize(stream);            }

恢复布局

        private void MenuItem_Click(object sender, RoutedEventArgs e)        {            var serializer = new XmlLayoutSerializer(dockingmanger);            using(var stream = new StreamReader("layout.xml"))            {                serializer.Deserialize(stream);            }        }