如何使用 MVVM 为 WPF Dirkster AvalonDock(v4.60.1) 手动设置可锚定视图 Floating/Hiding
How to set the Anchorable View Floating/Hiding Manually for WPF Dirkster AvalonDock(v4.60.1) with MVVM
我在我的 WPF 项目中使用带有 MVVM 模式的 Dirkster AvalonDock(v4.60.1)。
我想通过我的视图模型将 AnchorableView 状态更改为浮动或隐藏,但遗憾的是没有太多示例供我参考。
我的方法是在一个名为 LayoutInitializer 的 class 中控制视图状态,它处理 LayoutUpdateStrategy我的 AvalonDock。
这是我的 XAML Avalon Dock 代码:
<avalonDock:DockingManager.LayoutUpdateStrategy>
<helper:LayoutInitializer/>
</avalonDock:DockingManager.LayoutUpdateStrategy>
通过上面的代码,XAML会自己创建LayoutInitializerclass,通过这个class可以控制 AvalonDock 元素(例如 LayoutRoot、LayoutAnchorable、Container 等)
下面是我的 LayoutInitializer class 设置 AnchorableView 状态(浮动或隐藏)的代码:
public void AfterInsertAnchorable(LayoutRoot layout, LayoutAnchorable anchorableShown)
{
anchorableShown.FloatingHeight = 300;
anchorableShown.FloatingWidth = 400;
anchorableShown.FloatingTop = 150;
anchorableShown.FloatingLeft = 1000;
anchorableShown.CanDockAsTabbedDocument = false;
anchorableShown.CanMove = false;
anchorableShown.CanAutoHide = true;
anchorableShown.Float();
//anchorableShown.Hide();
}
它自己工作正常,但在某些情况下,我需要通过我的 ViewModel[ 手动将 AnchorableView 状态更改为 Float/Hide =68=].
我试图从我的 ViewModel 创建 LayoutInitializer class 的另一个新实例,但是这个新创建的 LayoutInitializer class无法访问AvalonDock Elements,也会导致重复class LayoutInitializer.
So, How should I set the AnchorableView state from my ViewModel manually?
Q2.
<avalonDock:DockingManager.LayoutUpdateStrategy>
<helper:LayoutInitializer/>
</avalonDock:DockingManager.LayoutUpdateStrategy>
我可以想出另一种方法来尝试,即为 LayoutInitializer 绑定一个 属性 到 XAML 代码。
而不是调用
helper:LayoutInitializer/
我可以在我的 ViewModel 中使用 XAML 代码 绑定 LayoutInitializer 的 属性,通过这个方法 ViewModel 可以共享同一个对象 LayoutInitializer class 和我的 ViewModel 也可以更改 AnchorableView 状态 (float/hide)!
But How can I bind the LayoutInitializer from my ViewModel to the XAML code (avalonDock:DockingManager.LayoutUpdateStrategy)?
#一个简单的问题:是否有人仍在使用 AvalonDock for WPF,或者是否有其他 Nuget 库用于停靠视图?
这是一个相当复杂的问题,如果我的问题让你感到困惑,抱歉。
但我真的需要你们的帮助!提前致谢!
下面是绑定 ViewModel 中的 LayoutInitializer 和 View。使用此方法,您可以访问 AvalonDock Elements,您可以自由更改 layout 文档 或 layout 的状态anchorable 甚至可以访问 LayoutInitializer class.
中的 layout root
我在我的 WPF 项目中使用带有 MVVM 模式的 Dirkster AvalonDock(v4.60.1)。 我想通过我的视图模型将 AnchorableView 状态更改为浮动或隐藏,但遗憾的是没有太多示例供我参考。
我的方法是在一个名为 LayoutInitializer 的 class 中控制视图状态,它处理 LayoutUpdateStrategy我的 AvalonDock。
这是我的 XAML Avalon Dock 代码:
<avalonDock:DockingManager.LayoutUpdateStrategy>
<helper:LayoutInitializer/>
</avalonDock:DockingManager.LayoutUpdateStrategy>
通过上面的代码,XAML会自己创建LayoutInitializerclass,通过这个class可以控制 AvalonDock 元素(例如 LayoutRoot、LayoutAnchorable、Container 等)
下面是我的 LayoutInitializer class 设置 AnchorableView 状态(浮动或隐藏)的代码:
public void AfterInsertAnchorable(LayoutRoot layout, LayoutAnchorable anchorableShown)
{
anchorableShown.FloatingHeight = 300;
anchorableShown.FloatingWidth = 400;
anchorableShown.FloatingTop = 150;
anchorableShown.FloatingLeft = 1000;
anchorableShown.CanDockAsTabbedDocument = false;
anchorableShown.CanMove = false;
anchorableShown.CanAutoHide = true;
anchorableShown.Float();
//anchorableShown.Hide();
}
它自己工作正常,但在某些情况下,我需要通过我的 ViewModel[ 手动将 AnchorableView 状态更改为 Float/Hide =68=].
我试图从我的 ViewModel 创建 LayoutInitializer class 的另一个新实例,但是这个新创建的 LayoutInitializer class无法访问AvalonDock Elements,也会导致重复class LayoutInitializer.
So, How should I set the AnchorableView state from my ViewModel manually?
Q2.
<avalonDock:DockingManager.LayoutUpdateStrategy>
<helper:LayoutInitializer/>
</avalonDock:DockingManager.LayoutUpdateStrategy>
我可以想出另一种方法来尝试,即为 LayoutInitializer 绑定一个 属性 到 XAML 代码。
而不是调用
helper:LayoutInitializer/
我可以在我的 ViewModel 中使用 XAML 代码 绑定 LayoutInitializer 的 属性,通过这个方法 ViewModel 可以共享同一个对象 LayoutInitializer class 和我的 ViewModel 也可以更改 AnchorableView 状态 (float/hide)!
But How can I bind the LayoutInitializer from my ViewModel to the XAML code (avalonDock:DockingManager.LayoutUpdateStrategy)?
#一个简单的问题:是否有人仍在使用 AvalonDock for WPF,或者是否有其他 Nuget 库用于停靠视图?
这是一个相当复杂的问题,如果我的问题让你感到困惑,抱歉。 但我真的需要你们的帮助!提前致谢!