【问题标题】:Caliburn Micro WindowManager set WindowStyle.None and allow draggingCaliburn Micro WindowManager 设置 WindowStyle.None 并允许拖动
【发布时间】:2025-12-16 14:20:05
【问题描述】:

我目前非常坚持这一点,我的设计师想让我们的应用程序使用 WindowStyle.None 来删除边框和默认的丑陋控件,然后他添加了自定义控件,通常是为了允许拖动过去我们使用了矩形并监视 mousedown 事件以允许拖动。

但是使用 Caliburn micro,我们失去了对窗口的控制,因为 windowmanager 为我们创建了它,我知道您可以覆盖 create window 方法,但这仍然无法访问将 UI 元素添加到窗口本身和绑定对那些事件。或者至少我可以想办法做到这一点。

基本上,我们想要实现的是具有 WindowStyle.None 的“主窗口”以及拖动和移动窗口的能力。我的谷歌搜索未能就此给出可靠的答案,我希望这里有人有想法。

【问题讨论】:

    标签: c# wpf mvvm caliburn.micro


    【解决方案1】:

    Caliburn.Micro 不会强迫您将所有视图都设为 UserControl。主视图或作为主窗口显示的视图可以是一个窗口控件,您可以直接在该窗口上设置属性,例如“WindowStyle.None”。当 Caliburn.Micro 看到您的主视图模型背后的视图(您用作根的视图模型,然后是您首先创建的视图模型)实际上是一个 Window 而不是一个 UserControl 然后它会尊重这个并显示那个窗口,它不会创建一个新窗口。因此,您可以直接在该窗口上设置属性,一切都会正常工作。

    【讨论】:

    • 我真的不知道,我所看到的一切都表明它总是能做成窗户,这将是完美的!
    【解决方案2】:

    Caliburn.Micro WindowManager 提供对其Show 方法的覆盖,允许您设置所创建窗口的设置。

    看看here 的例子。

    或者,您可以直接使用Window 作为您的视图类型(在 XAML 和生成的代码隐藏文件中),并在 XAML 中以声明方式设置属性。

    如果您希望所有对话框等都具有通用 UI 组件,那么您可以创建派生的 WindowManager 类型,将调用委托给 CM WindowManager,但将传入的视图模型与您的通用视图包装起来模型。然后在引导程序中注册这个自定义窗口管理器,而不是默认的 CM 窗口管理器。

    【讨论】: