如何从Caliburn Windows Manager对话框中删除最大化按钮

时间:2011-11-02 00:03:38

标签: wpf caliburn.micro

我正在使用Caliburn Micro Window Manager显示对话框。我想从对话框中删除最大化和最小化按钮。

如果我查看Windows Manager源代码(在WPF下),我可以看到第三个参数,它允许我将设置传递给对话框。我的问题是我无法传递第三个参数 - 我收到错误。这可以在hello窗口管理器示例项目中复制。

有什么想法吗?

不知何故,我似乎引用了一个只允许2个参数显示的IWindowManager。

这是我想要做的但是会导致错误:

var loginViewModel = new LoginViewModel();

WindowManager windowManager = new WindowManager();

Dictionary<string, object> settings = new Dictionary<string, object>();

// add settings here to pass to dialog

windowManager.ShowDialog(loginViewModel, null, settings);

这是IWindowManager界面,显示3个参数:

public interface IWindowManager
{
    /// <summary>
    /// Shows a modal dialog for the specified model.
    /// </summary>
    /// <param name="rootModel">The root model.</param>
    /// <param name="context">The context.</param>
    /// <param name="settings">The optional dialog settings.</param>
    /// <returns>The dialog result.</returns>
    bool? ShowDialog(object rootModel, object context = null, IDictionary<string, object> settings = null);

    /// <summary>
    /// Shows a non-modal window for the specified model.
    /// </summary>
    /// <param name="rootModel">The root model.</param>
    /// <param name="context">The context.</param>
    /// <param name="settings">The optional window settings.</param>
    void ShowWindow(object rootModel, object context = null, IDictionary<string, object> settings = null);

    /// <summary>
    /// Shows a popup at the current mouse position.
    /// </summary>
    /// <param name="rootModel">The root model.</param>
    /// <param name="context">The view context.</param>
    /// <param name="settings">The optional popup settings.</param>
    void ShowPopup(object rootModel, object context = null, IDictionary<string, object> settings = null);
}

3 个答案:

答案 0 :(得分:3)

dynamic settings = new ExpandoObject();
            settings.WindowStyle = WindowStyle.ToolWindow;
            settings.ShowInTaskbar = false;
            settings.Title = "Test";

windowManager.ShowDialog(loginViewModel, "Modeless", settings);

答案 1 :(得分:1)

我不记得任何最新版本的Caliburn.Micro使用了带三个参数的IWindowManager.ShowDialog。你是指this link from the Codeplex site吗?这似乎是Rob拒绝的用户请求。

正如您可能知道的那样,ShowDialog()将使IWindowManager实例化它找到的视图(通过命名约定)并将其附加到您提供的任何视图模型(例如,LoginViewModel附加到名为LoginView的“找到”视图)。

我猜测LoginView对你来说是一个UserControl,但你可以将这个视图作为常规窗口,然后设置WindowStyle属性(在XAML中)以使用其中一个没有最大化按钮的选项。 This MSDN article显示了各种枚举选项。 WindowStyle.ToolWindow是唯一包含关闭按钮而不是最小/最大按钮的窗口,但由于它改变了关闭按钮的外观,您可能更喜欢WindowStyle.None,只需定义自己的窗口镶边和按钮。

<Window x:Class="MyNamespace.LoginView"
        ...
        WindowStyle="ToolWindow">
    ...
</Window>

答案 2 :(得分:0)

而不是将您的View作为Usercontrol设为窗口并设置其 ResizeMode =“NoResize”

<Window x:Class="Company.Project.Views.MyView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    ResizeMode="NoResize">

现在您只有红色的“X”关闭按钮,没有最大化/最小化按钮。