是否可以通过使用某些过滤来阻止将一个可锚定元素对接到另一个元素?例如,在viewmodel我可以包含一些属性doctype
。对于一个可锚定元素,doctype
的值将为“a”,另一个为“b”。我如何使用属性doctype
来防止停靠,如果锚定元素的值“a”无法与doctype
“b”对接锚定元素?也许,还有其他解决方案。防止对接AvalonDock
1
A
回答
0
我在LayoutAnchorableFloatingWindowControl.cs
改变IOverlayWindowHost.GetDropAreas
方法
第一步是intializing的内容的类型。
var floatingWindowContentHost = Content as FloatingWindowContentHost;
if (floatingWindowContentHost == null) return _dropAreas;
var rootVisual = floatingWindowContentHost.RootVisual;
Type type = null;
var layoutAnchorableFloatingWindow = draggingWindow.Model as LayoutAnchorableFloatingWindow;
if (layoutAnchorableFloatingWindow != null)
{
//big part of code for getting type
var layoutAnchorablePane = layoutAnchorableFloatingWindow.SinglePane as LayoutAnchorablePane;
if (layoutAnchorablePane != null
&& (layoutAnchorableFloatingWindow.IsSinglePane
&& layoutAnchorablePane.SelectedContent != null))
{
var layoutAnchorable = ((LayoutAnchorablePane)layoutAnchorableFloatingWindow.SinglePane).SelectedContent as LayoutAnchorable;
if (layoutAnchorable != null)
type = layoutAnchorable.Content;
}
else
{
var pane = GetLayoutAnchorablePane(layoutAnchorableFloatingWindow.RootPanel);
if (pane == null || pane.SelectedContent == null)
return null;
var layoutAnchorable = pane.SelectedContent as LayoutAnchorable;
if (layoutAnchorable != null)
type = layoutAnchorable.Content;
}
}
此后,我只是比较两种类型,并把需要到_dropAreas
。
foreach (var areaHost in rootVisual.FindVisualChildren<LayoutAnchorablePaneControl>())
{
Type areahostType = null;
var layoutAnchorablePane = areaHost.Model as LayoutAnchorablePane;
if (layoutAnchorablePane != null && layoutAnchorablePane.SelectedContent != null)
{
var layoutAnchorable = ((LayoutAnchorablePane)areaHost.Model).SelectedContent as LayoutAnchorable;
if (layoutAnchorable != null)
areahostType = layoutAnchorable.Content;
}
// prevent docking different documents
if (type != null && areahostType != null && areahostType == type)
{
_dropAreas.Add(new DropArea<LayoutAnchorablePaneControl>(areaHost, DropAreaType.AnchorablePane));
}
}
为了防止对接成文档区域,需要在DockingManager.cs
对于视觉防止DropTargets来做出同样的方法改变需要改变OverlayWindow.cs
0
这是正确的更改IOverlayWindowHost.GetDropAreas
,但这一改变对我来说似乎更容易。
我简单的 “LayoutAnchorableFloatingWindowControl.cs” 删除此的foreach:
...
// Remove this foreach
foreach (var areaHost in rootVisual.FindVisualChildren<LayoutDocumentPaneControl>())
{
_dropAreas.Add(new DropArea<LayoutDocumentPaneControl>(
areaHost,
DropAreaType.DocumentPane));
}
return _dropAreas;
,并在 “DockingManager.cs” 其他实施必须添加一个其他的原因:
if (!isDraggingDocuments)
{
_areas.Add(new DropArea<DockingManager>(
this,
DropAreaType.DockingManager));
foreach (var areaHost in this.FindVisualChildren<LayoutAnchorablePaneControl>())
{
if (areaHost.Model.Descendents().Any())
{
_areas.Add(new DropArea<LayoutAnchorablePaneControl>(
areaHost,
DropAreaType.AnchorablePane));
}
}
}
// -----> This else is new
else
{
foreach (var areaHost in this.FindVisualChildren<LayoutDocumentPaneControl>())
{
_areas.Add(new DropArea<LayoutDocumentPaneControl>(
areaHost,
DropAreaType.DocumentPane));
}
foreach (var areaHost in this.FindVisualChildren<LayoutDocumentPaneGroupControl>())
{
var documentGroupModel = areaHost.Model as LayoutDocumentPaneGroup;
if (documentGroupModel.Children.Where(c => c.IsVisible).Count() == 0)
{
_areas.Add(new DropArea<LayoutDocumentPaneGroupControl>(
areaHost,
DropAreaType.DocumentPaneGroup));
}
}
}
return _areas;
所以,如果您不拖动LayoutDocument,则不要将文档窗格控件添加到拖放区域。
这就是它 - 适用于我。
相关问题
- 1. avalonDock在对接时卸载内容
- 2. 防止拼接
- 3. 防止SKLabelNode接收Touches
- 4. 防止间接通信
- 5. 防止页面链接
- 6. 防止直接访问PHP
- 7. 防止连接关闭JSoup
- 8. 如何防止Qt链接
- 9. 如何防止git接收
- 10. 防止ffmpeg接管stdout
- 11. avalondock mvvm
- 12. 防止在对方接受请求之前写入套接字
- 13. iOS - 防止对象释放
- 14. 防止对话形式
- 15. 防止对话建立
- 16. 防止EditText自动对焦
- 17. 防止对象切片 - C++
- 18. 防止对象缩放
- 19. 防止多个对象
- 20. .htaccess防止ajax请求的直接访问防止技术
- 21. 防止直接链接到.zip文件
- 22. 防止接受非本地连接
- 23. 如何防止链接超链接
- 24. Restyling AvalonDock高对比度主题?
- 25. 使用Xceed AvalonDock
- 26. Avalondock MVVM布局
- 27. 司令部AvalonDock
- 28. WPF AvalonDock ExpressionDark
- 29. AutoHideWidth为AvalonDock
- 30. 如果不需要,防止对象被链接?
对接系统如果不能对接,应该如何反应? – dymanoid
感谢您的提问。我想,应该检查'doctype'在可拖动或停靠事件。我不知道这是如何在AvalonDock工作。 –