如何以编程方式添加LayoutDocument及其中的一些UIElements? (比如stackpanel,scrollviewer等)当用户点击“新建项目”按钮时,我想在LayoutDocumentPane中添加带有stackpanel,canvas等的新LayoutDocument。我可以以某种方式从一个LayoutDocument克隆xaml代码并将其加载到新的?是否可以将Title LayoutDocument属性绑定到ViewModel属性? (我得到错误,它必须是依赖属性)
答案 0 :(得分: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);
}
答案 1 :(得分:5)
首先,在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);
抱歉我的英语不好。如果它有用,请重写一遍。
答案 2 :(得分:3)
我不熟悉WPF,尤其是AvalonDock。我这样做了它到目前为止工作:)
您可以为从LayoutDocument继承的文档编写单独的类。这样,您就可以使用VisualStudio Designer编辑“Project-Document”的标准布局(添加堆栈面板,画布等)。
(我假设您有一种标准的方式来显示“Project-Document”。否则,您可以像在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 Property的绑定。
答案 3 :(得分:0)
这完全正确。
您只需添加doc.Title = "My document title"
或
您可以在Title="My document title"
中添加document.xaml
作为孩子。