【问题标题】:Custom widget design time support?自定义小部件设计时间支持?
【发布时间】:2015-06-22 23:01:07
【问题描述】:

MonoDevelop (Stetic) 的 GUI 设计器为小部件提供设计时支持,例如 Notebook 小部件,它具有 Insert Page Before 和 Insert Page After 选项.它还允许我将子小部件拖放到这些单独的页面上。

这是直接在 Gtk# 中实现的吗?我在哪里可以检查这个代码?如何为我自己的自定义小部件实现这一点?我想创建一个类似笔记本的导航控件(类似于 MS Outlook 2007/2010/2013),可以使用 Stetic 拖放来设计。

我已经尝试在源代码中搜索MonoDevelop and Gtk#。在我看来,这可能会以类似的方式实现,使用额外的类和属性,例如在 Visual Studio 中使用Attributes and Design-Time Support,但我找不到任何证据。

【问题讨论】:

    标签: c# mono monodevelop gtk#


    【解决方案1】:

    在 MonoDevelop 中,Stetic 被定义为 AddIns 中的成员。从技术上讲,它始终可用/已安装,因此您不需要通过 Add In Manager 处理它。

    所以你正在寻找:

    MonoDevelop.GtkCore.dll
    libstetic.dll
    libsteticui.dll
    

    在 monodevelop 构建期间,假设您在本地有 monodevelop 代码,这些代码将被构建并放置在:

    monodevelop/main/build/AddIns/MonoDevelop.GtkCore
    

    您要查找的源代码位于:

    monodevelop/main/src/addins/*
    

    为了让你快速入门,我强烈推荐:

    • git 克隆 monodevelop 源代码库
    • cd 进入 repo
    • ./configure --help(找出你需要使用的选项)
    • 一旦您可以构建 monodevelop,您就可以使用该构建版本或 (Xamarin Starter+) 打开工作区 MonoDevelop.mdw(在 repo 的根目录中)
    • 导航到:
    • Main / Addins / MonoDevelop.GtkCore / libstetic
    • Main / Addins / MonoDevelop.GtkCore / libsteticui

    玩得开心冲进城堡;-)

    【讨论】:

    • 看起来动作在objects.xml注册并在Notebook.cs实现。因此,此功能直接内置到 libstetic 插件中,而 VS 通过 Attributes 和“Designer”类实现它。如果没有将我的小部件直接硬编码到 libstetic 中,我是否无法获得自定义设计器支持?
    • 好的,我以为您正在寻找一种方法来将相似的 MD GUI 设计器嵌入到另一个应用程序中。在 GTK# 中,如果您从小部件基本案例之一继承,您可以使用 [System.ComponentModel.ToolboxItem(true)] 对其进行类标记,它会显示在工具箱中(其他人只有该程序集(无源) ,将其作为任何其他程序集添加到他们的项目引用中,并且它在工具箱中。至于编写自定义小部件,完全取决于您。
    • 您可以创建一个由其他标准组成的混合/复合小部件。小部件,只继承一个现有的小部件并对其进行自定义,或者一直到底部并使用诸如 Gtk 绘图容器之类的东西。绘画,自定义道具,属性等由您决定。有帮助吗?
    • 更详细一点 - 我想在 Gtk# 中创建一个“Outlook 风格”导航小部件,类似于 this。我可能可以通过组合“选项卡”的 VButtonBox 和 VBox 的两个单元格来做到这一点。但如果可能的话,我还希望该控件在 Stetic 中具有“设计时”意识,这样我就可以轻松地添加/删除页面和拖放小部件,而无需在代码中搞砸。 WinForms 的“Serious Outlook 控件”通过一系列分配有“[Designer]”属性的类来提供此功能。
    • 在 GTK#2/Gtk2.x 这样的旧技术中回购它需要做很多工作。在写那么多代码之前,我会先看一下 Gtk3(单声道下的非标准,但工作是......慢慢......正在进行中,你将不得不放弃 RAD GUI,没有什么比 VS RAD GUI 设计师更好的了,除非你转向像跨平台 QT(最好的 x-plat GUI 之一)和 C++ 之类的东西。
    【解决方案2】:

    MonoDevelop 中的 Stetic 设计器根本不支持“可插入”小部件设计或命令的概念。它只是按照它支持的控件的方式编写的,其他任何东西都必须通过 Custom Widget 小部件添加并通过代码进行操作。

    【讨论】:

      猜你喜欢
      • 2014-09-16
      • 1970-01-01
      • 2015-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多