我有一些问题,就像在这里被问到的那样: How to place instance of window in LayoutAnchorable AvalonDock 2
在这种情况下,我使用的是AvalonDock 2.0,Caliburn.Micro和Mahapps.Metro。
似乎我实际上可以将我的viewmodel映射到'LayoutAnchorable',但是当我点击它时,它并没有显示该控件的内容(它是一个MetroContentControl)。我应该怎么做...它看起来像一个隐藏的ContentControl正在显示。
XAML的代码
<ad:LayoutRoot.BottomSide>
<ad:LayoutAnchorSide>
<ad:LayoutAnchorGroup>
<ad:LayoutAnchorable Title="Test" ContentId="123">
<DataTemplate>
<Controls:MetroContentControl cal:View.Model="{Binding ActiveLogViewModel}" />
</DataTemplate>
</ad:LayoutAnchorable>
</ad:LayoutAnchorGroup>
</ad:LayoutAnchorSide>
</ad:LayoutRoot.BottomSide>
AD 2.0在使用和放置控件时是否有限制?这样做的最佳做法是什么?
更新
<ad:DockingManager x:Name="adManagerTop" DocumentsSource="{Binding DocumentSources}" Margin="0,0,0,40">
<ad:DockingManager.Theme>
<ad:MetroTheme />
</ad:DockingManager.Theme>
<ad:DockingManager.LayoutItemContainerStyle>
<Style TargetType="{x:Type ad:LayoutItem}">
<Setter Property="Title" Value="{Binding Model.Title}"/>
<Setter Property="CanClose" Value="{Binding Model.CanClose}"/>
<Setter Property="CanFloat" Value="{Binding Model.CanFloat}" />
</Style>
</ad:DockingManager.LayoutItemContainerStyle>
<ad:DockingManager.LayoutItemTemplate>
<DataTemplate>
<Controls:MetroContentControl cal:View.Model="{Binding Content}" />
</DataTemplate>
</ad:DockingManager.LayoutItemTemplate>
<ad:LayoutRoot>
<ad:LayoutPanel>
<ad:LayoutDocumentPane />
</ad:LayoutPanel>
</ad:LayoutRoot>
</ad:DockingManager>
答案 0 :(得分:0)
我只想绑定AnchorablesSource
和DocumentsSource
我在我的应用中这样做了
https://github.com/AndersMalmgren/FreePIE/blob/master/FreePIE.GUI/Shells/MainShellView.xaml
然后启动应用程序,并在用户第一次启动程序时按照您希望的那样组织面板。使用XmlLayoutSerializer
将状态保存到磁盘,将XML作为资源嵌入到您的程序中。加载布局时,如果存在布局,请使用光盘上的布局,或使用嵌入在程序中的布局。