阴影属性不是由设计器设置的
本文关键字:设置 属性 阴影 | 更新日期: 2023-09-27 17:57:49
我有一个从Panel
派生的自定义控件。
我正在跟踪Size属性,因为我需要调整它(控件基本上是Winforms中的扩展器):
Private DesiredSize As Size
Public Shadows Property Size As Size
Get
Return DesiredSize
End Get
Set(value As Size)
DesiredSize = value
AdjustHeight()
End Set
End Property
AdjustHeight()
或多或少地将基本大小设置为基于IsExpanded属性的值
Public Property CollapsedWidth As Integer
Private Sub AdjustHeight()
If IsExpanded Then
MyBase.Size = DesiredSize
Else
Dim newh As Integer = 15
Dim neww As Integer
If CollapsedWidth > 0 Then
neww = CollapsedWidth
Else
neww = DesiredSize.Width
End If
MyBase.Size = New Size(neww, newh)
End If
End Sub
我在构造函数中使用DesiredSize = MyBase.Size
初始化DesiredSize。
这已经足够好了,但是我在Visual Studio设计器中遇到了一个问题。每当调整控件的大小时,"大小"属性都不会更新。表单上的控件在设计时会调整大小,但一旦启动应用程序,无论是在运行时还是在设计时,它都会恢复到初始大小。
在Designer中如何实际处理Size属性?我可能需要向shadows Size属性添加某种属性才能使其工作吗?
非常感谢VB.NET和C#中的答案。
编辑:
我试着将<DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)>
标记添加到该属性中,因为我读到它在这种情况下可能会有所帮助,但它不会改变我正在经历的行为。
编辑2:
我通过采用不同的路径并避免遮蔽Size属性来解决这个问题。然而,我将保留这个问题,因为我仍然想知道上面发布的方法是否可行。
我不希望Shadow
ed属性能被表单设计器读取,因为它会把所有东西都当作Control
来处理——它不知道你的类,这就是Shadowing方法的风险——你正在提供一个新的实现,但只提供给了解你的人——了解你的基类的人,将获得基类的实现。
如果Control.Size
属性是可重写的(如果您愿意的话,是虚拟的),那么您可以重写它,它就会起作用。