我只想用“工具”窗口填充AvalonDock应用程序而不需要任何文档。我可以手动最小化文档窗格区域,但如果可能的话,我想用另一个可锚定的窗口填充该小区域,以便LayoutDocumentPane的宽度和高度为零。
AvalonDock框架假设在我的案例中至少有一个空的DocumentPane变得明显。即使没有文档,DocumentPane的空间也很容易被其附近的其他工具窗口重叠或重叠。这使得某些窗口部分不可见或填充不足。
到目前为止我徒劳无功的尝试了:
任何线索将不胜感激
答案 0 :(得分:1)
还原后,我删除了一个DocumentPane的文档:
public static void Restore(DockingManager dockingManager, string file)
{
if (File.Exists(file))
{
try
{
var serializer = new XmlLayoutSerializer(dockingManager);
// Imparitive for Deserialization
serializer.LayoutSerializationCallback += (s, args) =>
{
args.Content = args.Content;
};
serializer.Deserialize(file);
var laToDelete = Singleton.WindowMain.DocumentPane.Children
.OfType<LayoutAnchorable>()
.ToList();
for (var index = 0; index < laToDelete.Count; index++)
{
LayoutAnchorable layoutAnchorable = laToDelete[index];
Singleton.WindowMain.DocumentPane.Children.Remove(layoutAnchorable);
}
}
catch
{
File.Delete(file);
}
}
}
答案 1 :(得分:0)
除了更改源代码之外,似乎没有办法做到这一点。在LayoutRoot.cs的CollectGarbage方法中,我注释掉了下面的代码并获得了我想要的东西 - 没有任何DocumentPane的AvalonDock应用程序。如果确实没有这方法,我强烈建议作者可以选择不修改源代码。希望它能帮助像我这样的人。
if (emptyPane is LayoutDocumentPane &&
this.Descendents().OfType<LayoutDocumentPane>().Count(c => c != emptyPane) == 0)
continue;
答案 2 :(得分:0)
另一种解决方案是使用以下代码再次加载布局:
Dispatcher.Invoke(new Action(() =>
{
LoadPageLayout(page);
}), DispatcherPriority.ContextIdle, null);
private void LoadPageLayout(Dashboard.ViewModel.PageViewModel selectedPage)
{
var serializer = new Xceed.Wpf.AvalonDock.Layout.Serialization.XmlLayoutSerialize(dockingManager);
serializer.LayoutSerializationCallback += (s, args) =>
{
args.Content = args.Content;
};
var layoutToRestore = selectedPage.GetLayout();
if (!String.IsNullOrEmpty(layoutToRestore))
{
// Remove any existing LayoutDocumentPane
var cleanedLayout = RemoveAllEmptyXmlNodes(layoutToRestore);
StringReader textReader = new StringReader(cleanedLayout);
serializer.Deserialize(textReader);
}
}