1

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

4

4 回答 4

6

你可以使用Content属性。例如,如果您想添加一个 LayoutDocument带有自定义内容的新内容(StackPanel例如),您可以按如下方式进行:

//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);
}
于 2013-02-19T02:01:25.827 回答
5

首先,在 XAML 中 - 为 Grid 命名,例如,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);

对不起我的英语不好。请重写这个,如果它会有所帮助。

于 2014-08-11T20:49:41.347 回答
3

我对 WPF 尤其是 AvalonDock 不太熟悉。我是这样做的,到目前为止它仍然有效:)

您可以为从 LayoutDocument 继承的文档编写一个单独的类。通过这种方式,您应该能够使用 VisualStudio 设计器编辑“项目文档”的标准布局(添加您的堆栈面板、画布等)。

(我假设您有一种显示“项目文档”的标准方式。否则,您可以像在 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>


后面的代码中的类继承自 LayoutDocument:

namespace Namespace
{
    public partial class MyDocument : AvalonDock.Layout.LayoutDocument
    {
        // ...
    }
}



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


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

于 2012-10-03T15:09:35.767 回答
0

那是完全正确的。您只需添加即可添加标题doc.Title = "My document title"

或者

您可以添加Title="My document title"document.xaml成为孩子的。

于 2012-10-29T19:52:08.940 回答