问题标签 [design-surface]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
395 浏览

silverlight - VS2008 中损坏的 Silverlight 设计-Surface

在 VisualStudio 2008 中,设计界面只是空的,因为我将此样式添加到 App.xaml:

并在顶部添加此必需的命名空间以使数据:可解析

运行 Silverlight 应用程序时,一切正常。然而,设计表面是空的,我在编辑 xaml 时出现了这个错误:

属性值数据无效:属性 TargetType 的 DataGridCell

如前所述,这个错误只是在设计时发生的。编译工作完美。我在做什么错,为什么设计者不能正确解析这个命名空间?

更新:此外,当我将样式从 App.xaml 移动到 Page.xaml 时,设计师再次工作。有什么想法吗?

0 投票
3 回答
2131 浏览

c# - 捕捉鼠标移动

情况 :

我目前正在开发一个项目,其目标是开发一个类似 VS 的 IDE,用户可以在其中将新控件拖放到设计表面,并修改这些控件的属性。

所以我实现IDesignerHost, IServiceContainer, IContainer, IComponentChangeService,了和其他一些有用的界面,专门设计的。

一切正常,我有我的工具箱,我的设计界面,我的propertyGrid工作也很好。

问题是:

附加到拖放控件的是一个标签,当用户用鼠标移动它时,它必须跟随控件

我尝试使用LocationChanged event控件的,在控件移动时移动标签。但是这个事件只发生一次,在控件移动之后,标签在控件移动时不会移动。

我无法找到一种方法来完成这项工作。请问有人有什么好主意吗?

谢谢

编辑: 我使用自定义类,实现 IDesignerHost。此设计图面上的控件不会触发事件 Mouse-----(例如:MouseDown、MouseMove)。

0 投票
0 回答
233 浏览

winforms - DesignSurface 和缩放

我正在尝试在 DesignSurface 上实现缩放功能,它使用基于 .Net 2 的 Designer 时间架构。我有两种方法来处理 ZoomChanged 事件:

  1. 卸载设计图面并重新加载缩放内容。
  2. 识别受影响的属性并将它们设置为属性的缩放值。

问题:
在方法 1 中,卸载和重新加载对于运行时来说是一项相当大的任务,并且会卸载和重新加载许多不受缩放更改影响的属性。

在方法 2 中,被更改的属性会引发大量 PropertyChanged 事件并执行相关处理程序,这会使响应非常缓慢。如果我想取消订阅并重新订阅所有事件处理程序,我将没有任何一个地方可以这样做,因为它跨越了许多依赖组件。

有人来救吗?

0 投票
1 回答
354 浏览

vb.net - 为自定义 SplitContainerDesigner 捕获鼠标事件

我正在尝试创建一个用户控件,该控件将在自定义 IDesignerHost 实现中提供两个面板之间的可拖动拆分器 - 就像 SplitContainer 一样。据我所知,SplitContainer 本身不是一种选择。除非在 Visual Studio 的设计器中使用,否则它将引发异常。

我的实现大致如下所示,除了我没有收到必要的鼠标事件。我在用户控件本身、主机控件和父窗体中尝试了事件处理程序、On*覆盖和覆盖WndProc,但我似乎没有在任何地方WM_MOUSEMOVE接收或事件。根据这个错误报告,我应该在“控件设计器”中收到;我不确定在这种情况下指的是什么。WM_LBUTTONDOWNWM_LBUTTONUPWM_MOUSEMOVE

有什么想法可以实现可拖动的拆分器吗?

0 投票
2 回答
1385 浏览

c# - 在 PropertyGrid 中按 Delete 键时设置属性值

我目前正在开发一个托管 WinForms 设计器的项目。我PropertyGrid用来显示拖放到DesignSurface.

我创建了UITypeEditor's 来修改我的自定义控件属性的值。

如何将属性的值重置为nullPropertyGrid.

0 投票
1 回答
996 浏览

winforms - 继承的控件可见/启用属性值始终为真:PropertyGrid

我创建了一个自定义 WinForms 托管环境。其中有一个工具箱和一个 PropertyGrid。

工具箱中显示的控件继承自现有的 WinForm 控件。

下拉列表来源:

我已经实现ICustomTypeDescriptor过滤掉我不想在PropertyGrid.

问题:

我在序列化从类继承的Enabled&Visible属性的值时遇到问题。System.Windows.Forms.Control

WriteProperties 方法 ( BasicDesignerLoader):

问题 #1: &属性的ShouldSerializeValue方法总是返回 false。EnabledVisible

问题#2:即使我跳过ShouldSerializeValue方法检查总是返回的GetValue方法。PropertyDescriptorTrue

当前解决方法: 作为一种解决方法,我目前使用 隐藏了Enabled&属性,并创建了另外两个布尔属性并使用 将它们的显示名称更改为& 。VisibleBrowsableAttributeDisplayNameAttributeEnableVisible

但是对于这种解决方法,我必须在每个控件中编写这些片段。

我错过了什么或做错了什么?为什么Enabled&Visible属性不变?

0 投票
1 回答
1267 浏览

c# - 将已构建的 WinForms.Form 实例序列化为 VB 或 C# 源代码,就像 IDE 一样

我有大约 500 个由旧应用程序从 XML 文件动态生成的 WinForms。我想自动将这些转换为可以在设计器中编辑的 VB 或 C# 代码。

我可以手动完成,这将需要永远......

或者编写一个加载每个 XML 的应用程序,调用旧应用程序的 xml-to-winform-b​​uilder 以将其转换为完整的 WinForm,并检查每个控件的属性并使用 StringBuilder 生成设计人员可以接受的代码。这充其量是艰巨的。

但是:我想使用设计师使用的相同代码。我认为这将节省我处理极端情况的时间。

我想做的是,获取一个已经构建的 WinForm 对象,其中包含充满子控件的控件数组(由旧应用程序 xml-to-winform 代码创建),将其扔到 IDE 用于序列化设计表单的相同代码中到 CodeDom,并取回我可以用真实语言保存的 CodeDom 语句列表。一旦我得到 CodeDOM,我会很高兴的!

编辑

这篇 Codeproject文章体现了我想要做的“概念”:从完成的表单开始,将其转换(“序列化”)为代码。但是,它有两个不足:(1)它使用模板/字符串生成器生成 .aspx 页面,这就是属性所在(对于 webforms 很好,但 winforms 将属性序列化到实际的 .Designer.vb 文件中);(2) 这一切都是从头开始的。我想重用视觉工作室的例程。它们允许您使用许多东西来执行此操作,例如属性网格。我只是在寻找一篇文章的链接(也许我的 google-fu 太弱了),或者是某人已经做过的简短代码示例。

0 投票
1 回答
226 浏览

c# - 自定义设计器更改了我的组件在设计图面上的显示

注意:我放置 C# 标签是为了更清楚地了解这个问题,作为对我来说很好的 C# 答案,我将能够将它翻译成 VB .NET。我面临的问题是 .NET Framework 中的概念。

我目前正在编写一个图形设计师,以便用户可以将我自己的一组自定义组件添加到设计界面中,按照他们的意愿排列它们,然后将其保存到文本文件中。

大多数情况下它工作正常,但我尝试使用自定义设计器来隐藏一些我不想向用户显示的属性:

所以这并不复杂。要激活我的设计器,我必须在组件类定义中将其设置为属性:

所以这也不是很复杂。

问题

问题是,当MyLabel在设计表面上创建一个新的并且我设置了DesignerAttribute时,它会显示在表面下方,如图所示:

自定义组件错误显示

这是我删除时的结果DesignAttribute

自定义组件正确显示

这是我真正想要展示的。

我的问题

为了完成这项工作,我在这里缺少什么?

0 投票
1 回答
124 浏览

c# - 在设计图面上使用文本框、标签、按钮控件的事件

谁能帮我回答我的问题,即我们如何在 Designer 中为动态生成的组件实现点击事件。

我曾提到DesignSurface(扩展)类又回来了,还有一个 DesignSurfaceManager(扩展)类和一个表单设计器演示![^] 网站

我在里面使用了下面的代码片段

上课,但没有取得任何成功。

我还尝试通过使用标签内定义的所有事件为标签创建用户控件并通过上面的代码片段创建它来实现它,但它也没有工作。下面是我用于用户控制的逻辑。

用户控制

另外,我想保存/查看我在强大的 DesignSurface Designer 中构建的自定义表单。我怎样才能做到这一点?

0 投票
1 回答
279 浏览

c# - 需要从 .NET Winforms 控件的 PropertyGrid 中隐藏仅设计器的属性

我在我的 C#/.NET 解决方案中深入使用 Winforms 设计器(System.ComponentModel.Design 命名空间),以便我的用户可以访问我正在运行的应用程序中的表单设计器。其中大部分都运行良好,但我遇到了一个非常具体的问题:我在 Microsoft 控件上遇到了一个仅在设计时出现的属性——即,用于控件的设计时实例。我想禁止该属性,以便用户在我的程序的 Winform 设计图面实现上放置该控件的实例时无法修改它。

详细信息:当用户将控件从工具箱拖放到设计器表面时,我确保选择了新添加的控件设计器实例(以便它显示调整大小的句柄,因此属性网格显示该控件的设计-时间属性)。通过使用选择服务的GetSelectedComponents()方法并将属性网格的SelectedObjects属性分配给结果,我将设计器表面上的选定对象绑定到属性网格。

我的工具箱中的许多控件都是 .NET 控件。其中之一是 .NET Winforms TableLayoutPanel控件。当您将该控件的实例放置在设计器图面上时,您将在绑定的PropertyGrid中看到一个Columns属性。我想抑制该属性,使其不会出现在PropertyGrid中。

问题是TableLayoutPanel类型的属性列表中似乎不存在此 Columns 属性-selectedComponents[0].GetType().GetProperties()例如,使用 不包含Columns属性。此外,我无法为现有的Columns属性创建新的或覆盖,因为它在设计时并未显示为TableLayoutPanel控件的公开属性——因此我无法使用该Browsable(false)属性对其进行装饰。

我似乎无法利用PreFilterPropertiesPostFilterProperties因为我无法交互和自定义TableLayoutPanel 的设计器。

如何抑制TableLayoutPanel的Columns设计器属性,使其不会出现在PropertyGrid中而无需编写我自己的设计器?