内部にいくつかのUIElementsを含むLayoutDocumentをプログラムで追加するにはどうすればよいですか? (stackpanel、scrollviewerなど)ユーザーが「新しいプロジェクト」ボタンをクリックしたときに、stackpanel、canvasなどを含む新しいLayoutDocumentをLayoutDocumentPaneに追加したいと思います。1 つの LayoutDocument から xaml コードを何らかの方法で複製し、それを新しいものにロードできますか? Title LayoutDocument プロパティを ViewModel プロパティにバインドすることは可能ですか? (依存関係プロパティでなければならないというエラーが表示されます)
4 に答える
プロパティを使用でき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);
}
最初に、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);
下手な英語でごめんなさい。役に立ちそうなら、これを書き直してください。
私は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 プロパティのバインドについてはわかりません。
まさにそうです。追加するだけでタイトルを追加できますdoc.Title = "My document title"
また
Title="My document title"
子になる を追加できますdocument.xaml
。