NanUI

控件样式

概述

控件样式是此版本新增的一种特殊窗体样式,这种样式是可将 WinFormium 窗体作为控件嵌于 WinForm 容器控件的一种技术。使用控件样式可以让您在 WinForm 窗体的局部控件中使用 WinFormium,从而实现更丰富的用户交互界面。

使用 WindowStyleBuilder 类的扩展方法 UseAsEmbedded 来启用 WinFormium 窗体的控件样式,该方法接受一个 Control 类型参数,该参数需要从 WindowStyleBuilder 参数的 ContainerControl 属性获取。

启用控件样式的 Formium 子类还需要在其构造函数中传入一个 Control 类型的参数,该参数将作为 WinFormium 窗体的容器控件。

protected override FormStyle ConfigureWindowStyle(WindowStyleBuilder builder)
{
    var style = builder.UseAsEmbedded(builder.ContainerControl);
    return style
}

示例

下面的示例将详细介绍如何使用 WinFormium 窗体创建一个可用于 WinForm 窗体的控件。

首先,您还是需要创建一个继承 FormiumMyEmbeddedFormium

class MyEmbeddedFormium : Formium
{
    public MyEmbeddedFormium(Control containerControl)
      : base(containerControl)
    {
    }

    protected override FormStyle ConfigureWindowStyle(WindowStyleBuilder builder)
    {
        var style = builder.UseAsEmbedded(builder.ContainerControl);
        return style
    }
}

创建了 MyEmbeddedFormium 类之后您可以直接在 WinForm 窗体的代码中使用该类,也可以为其创建一个容器控件。如果您需要在多处引用该控件,那么建议您创建一个容器控件,这样可以避免重复编写初始化代码。

下面将分别介绍如何在 WinForm 窗体的代码中使用 MyEmbeddedFormium 类和如何为其创建一个容器控件。

直接使用 MyEmbeddedFormium 类

您可以在 WinForm 的任意窗体构造函数里创建一个 MyEmbeddedFormium 类的实例,然后将其添加到窗体任意容器控件中(或者是窗体本身)。

下面的示例,假设您已经创建了一个 WinForm 窗体 Form1 并为其添加了一个用于嵌入 WinFormium 窗体的容器控件 panel1,您可以在窗体的构造函数中创建一个 MyEmbeddedFormium 类的实例,并将其添加到 panel1 容器控件中。

class Form1 : Form
{
    MyEmbeddedFormium embeddedFormium;
    public Form1()
    {
        InitializeComponent();

        embeddedFormium = new MyEmbeddedFormium(panel1);

    }
}

创建容器控件

您也可以为 MyEmbeddedFormium 类创建一个容器控件,这样可以避免重复编写初始化代码。创建的容器控件也将自动添加到 Visual Studio 的控件工具箱中,您可以在设计器中直接拖拽该控件到窗体中。

但请使用 DesignMode 属性来避免在设计器中初始化 CEF 运行环境,这是不被支持的。

在下面的示例中继续使用上述 MyEmbeddedFormium 类,在该类的基础上新建 MyFormiumBrowserControl 控件,该类继承自 Control 类。

public class MyFormiumBrowserControl : Control
{
    MyEmbeddedFormium embeddedFormium;

    public MyEmbeddedFormium EmbeddedFormium
    {
        get { return embeddedFormium; }
    }

    public MyFormiumBrowserControl()
    {
        if (!DesignMode)
        {
            embeddedFormium = new MyEmbeddedFormium(this);
        }
    }
}

另请参阅