1

内部にいくつかのUIElementsを含むLayoutDocumentをプログラムで追加するにはどうすればよいですか? (stackpanel、scrollviewerなど)ユーザーが「新しいプロジェクト」ボタンをクリックしたときに、stackpanel、canvasなどを含む新しいLayoutDocumentをLayoutDocumentPaneに追加したいと思います。1 つの 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 で - グリッドに名前を付けます (例: 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 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 プロパティのバインドについてはわかりません。

于 2012-10-03T15:09:35.767 に答える
0

まさにそうです。追加するだけでタイトルを追加できますdoc.Title = "My document title"

また

Title="My document title"子になる を追加できますdocument.xaml

于 2012-10-29T19:52:08.940 に答える