WPF/AvalonDock v2.0布局文档

WPF/AvalonDock v2.0布局文档,wpf,avalondock,Wpf,Avalondock,如何以编程方式添加包含一些UIElements的LayoutDocument?(如stackpanel、scrollviewer等)我想在用户单击“新建项目”按钮时,将带有stackpanel、canvas等的新LayoutDocument添加到LayoutDocumentPane。我可以从一个LayoutDocument中克隆xaml代码并将其加载到新的LayoutDocument中吗?是否可以将标题LayoutDocument属性绑定到ViewModel属性?(我得到一个错误,它必须是依赖属

如何以编程方式添加包含一些UIElements的LayoutDocument?(如stackpanel、scrollviewer等)我想在用户单击“新建项目”按钮时,将带有stackpanel、canvas等的新LayoutDocument添加到LayoutDocumentPane。我可以从一个LayoutDocument中克隆xaml代码并将其加载到新的LayoutDocument中吗?是否可以将标题LayoutDocument属性绑定到ViewModel属性?(我得到一个错误,它必须是依赖属性)

我不太熟悉WPF,尤其是AvalonDock。我是这样做的,到目前为止效果很好:)

您可以为从LayoutDocument继承的文档编写单独的类。这样,您应该能够使用VisualStudio设计器编辑“项目文档”的标准布局(添加stackpanel、画布等)。

(我假设您有一种显示“项目文档”的标准方式。否则,您可以像在WPF中一样,在代码隐藏中构建内容,并将其放入LayoutDocument中。)

例如:

<ad:LayoutDocument x:Class="Namespace.MyDocument"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:ad="http://avalondock.codeplex.com"
    d:DesignHeight="500"
    d:DesignWidth="800"

<Grid>
    <!-- content -->
</Grid>

</ad:LayoutDocument>


要创建和添加新文档,只需实例化一个新的MyDocument对象,并通过绑定或类似于
layoutDocumentPane.Children.add(doc)
的方式将其添加到集合中



不过,我不知道Title属性的绑定。

我不太熟悉WPF,尤其是AvalonDock。我是这样做的,到目前为止效果很好:)

您可以为从LayoutDocument继承的文档编写单独的类。这样,您应该能够使用VisualStudio设计器编辑“项目文档”的标准布局(添加stackpanel、画布等)。

(我假设您有一种显示“项目文档”的标准方式。否则,您可以像在WPF中一样,在代码隐藏中构建内容,并将其放入LayoutDocument中。)

例如:

<ad:LayoutDocument x:Class="Namespace.MyDocument"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:ad="http://avalondock.codeplex.com"
    d:DesignHeight="500"
    d:DesignWidth="800"

<Grid>
    <!-- content -->
</Grid>

</ad:LayoutDocument>


要创建和添加新文档,只需实例化一个新的MyDocument对象,并通过绑定或类似于
layoutDocumentPane.Children.add(doc)
的方式将其添加到集合中


不过,我不知道Title属性的绑定。

没错。 只需添加
doc.title=“我的文档标题”

您可以在
document.xaml中添加
Title=“My document Title”
,这将是子文档。

完全正确。 只需添加
doc.title=“我的文档标题”


您可以在
document.xaml
中添加
Title=“My document Title”
,该文件将成为子文件。

您可以使用
Content
属性。例如,如果要添加新的带有自定义内容的
LayoutDocument
StackPanel
e.g.),可以按如下操作:

//Get the main LayoutDocumentPane of your DockingManager 
var documentPane = dockManager.Layout.Descendents().OfType<LayoutDocumentPane>().FirstOrDefault();

if (documentPane != null)
{
    LayoutDocument layoutDocument = new LayoutDocument {Title = "New Document"};

    //*********Here you could add whatever you want***********
    layoutDocument.Content = new StackPanel();

    //Add the new LayoutDocument to the existing array
    documentPane.Children.Add(layoutDocument);
}
//获取DockingManager的主布局文档窗格
var documentPane=dockManager.Layout.degents().OfType().FirstOrDefault();
如果(documentPane!=null)
{
LayoutDocument LayoutDocument=新的LayoutDocument{Title=“new Document”};
//*********在这里,你可以添加任何你想要的***********
layoutDocument.Content=new StackPanel();
//将新的LayoutDocument添加到现有阵列
documentPane.Children.Add(布局文档);
}

您可以使用
内容
属性。例如,如果要添加新的带有自定义内容的
LayoutDocument
StackPanel
e.g.),可以按如下操作:

//Get the main LayoutDocumentPane of your DockingManager 
var documentPane = dockManager.Layout.Descendents().OfType<LayoutDocumentPane>().FirstOrDefault();

if (documentPane != null)
{
    LayoutDocument layoutDocument = new LayoutDocument {Title = "New Document"};

    //*********Here you could add whatever you want***********
    layoutDocument.Content = new StackPanel();

    //Add the new LayoutDocument to the existing array
    documentPane.Children.Add(layoutDocument);
}
//获取DockingManager的主布局文档窗格
var documentPane=dockManager.Layout.degents().OfType().FirstOrDefault();
如果(documentPane!=null)
{
LayoutDocument LayoutDocument=新的LayoutDocument{Title=“new Document”};
//*********在这里,你可以添加任何你想要的***********
layoutDocument.Content=new StackPanel();
//将新的LayoutDocument添加到现有阵列
documentPane.Children.Add(布局文档);
}

首先,在XAML中-为网格命名,例如x:name=“mainGrid”

然后在课堂上写这个

        //Create button - we put this in document
        Button mybutton = new Button();
        mybutton.Content = "hello";
        mybutton.Width = 100;
        mybutton.Height = 50;
        mybutton.Click += (sender, ev) => { MessageBox.Show("Hello"); };


        DockingManager dockmanager = new DockingManager();

        //Set theme
        dockmanager.Theme = new Xceed.Wpf.AvalonDock.Themes.ExpressionLightTheme();

        //Create LayoutRoot
        var layoutroot = new Xceed.Wpf.AvalonDock.Layout.LayoutRoot();

        //Create LayoutPanel
        var layoutpanel = new Xceed.Wpf.AvalonDock.Layout.LayoutPanel();

        //Create LayoutDocumentPane
        var layoutdocpane = new Xceed.Wpf.AvalonDock.Layout.LayoutDocumentPane();

        //Create LayoutDocument and set parameters of Document
        var LayoutDocument = new Xceed.Wpf.AvalonDock.Layout.LayoutDocument();
        LayoutDocument.Title = "Some text";
        //Put button in Document
        LayoutDocument.Content = mybutton;

        layoutdocpane.Children.Add(LayoutDocument);
        layoutpanel.Children.Add(layoutdocpane);
        layoutroot.RootPanel.Children.Add(layoutpanel);

        dockmanager.Layout = layoutroot;
        mainGrid.Children.Add(dockmanager);

对不起,我的英语很差。如果有帮助的话,请重写它。

首先,在XAML中-给网格命名,例如,x:name=“mainGrid”

然后在课堂上写这个

        //Create button - we put this in document
        Button mybutton = new Button();
        mybutton.Content = "hello";
        mybutton.Width = 100;
        mybutton.Height = 50;
        mybutton.Click += (sender, ev) => { MessageBox.Show("Hello"); };


        DockingManager dockmanager = new DockingManager();

        //Set theme
        dockmanager.Theme = new Xceed.Wpf.AvalonDock.Themes.ExpressionLightTheme();

        //Create LayoutRoot
        var layoutroot = new Xceed.Wpf.AvalonDock.Layout.LayoutRoot();

        //Create LayoutPanel
        var layoutpanel = new Xceed.Wpf.AvalonDock.Layout.LayoutPanel();

        //Create LayoutDocumentPane
        var layoutdocpane = new Xceed.Wpf.AvalonDock.Layout.LayoutDocumentPane();

        //Create LayoutDocument and set parameters of Document
        var LayoutDocument = new Xceed.Wpf.AvalonDock.Layout.LayoutDocument();
        LayoutDocument.Title = "Some text";
        //Put button in Document
        LayoutDocument.Content = mybutton;

        layoutdocpane.Children.Add(LayoutDocument);
        layoutpanel.Children.Add(layoutdocpane);
        layoutroot.RootPanel.Children.Add(layoutpanel);

        dockmanager.Layout = layoutroot;
        mainGrid.Children.Add(dockmanager);

对不起,我的英语很差。如果有帮助的话,请重写此内容。

谢谢,但我已经使用继承自ad:Docking manager中DataTemplateSelector和DocumentSource={Binding Documents}的类实现了此功能,该类绑定到我的文档视图模型。您还可以轻松地通过将Style.Setter property=“Title”设置为ViewModel中的值来绑定到Title属性。谢谢,但我已经通过继承自ad:Docking manager中的DataTemplateSelector和DocumentSource={Binding Documents}的类实现了这一点,该类绑定到我的文档ViewModel。您还可以通过将Style.Setter property=“Title”设置为ViewModel中的值来轻松绑定到Title属性。+1最终找到了一些代码,展示了如何使用AvalonDockOh从下到上以编程方式完成所有工作。哈哈,对不起,我的误解:)+1终于找到了一些代码,展示了如何使用AvalonDockOh从下到上编程地完成所有事情。哈哈,对不起,我的误解:)