为啥在 UserControl 中没有正确更新 Visible 属性?

Posted

技术标签:

【中文标题】为啥在 UserControl 中没有正确更新 Visible 属性?【英文标题】:Why is the Visible property not correctly updated in a UserControl?为什么在 UserControl 中没有正确更新 Visible 属性? 【发布时间】:2011-04-16 08:38:42 【问题描述】:

有时我的 UserControl 的 Visible 属性没有得到正确更新。它发生在我的应用程序启动时,在 OnFontChanged 中,从 InitializeComponent 内部触发,可能是因为尚未设置其他一些东西。我就是不知道是什么。

vScrollBar 是一个 UserControl,位于另一个 UserControl 中。显然,这只发生在尝试将值设置为 true 时。 vScrollBar 已经创建了句柄,正如 IsHandleCreated 上的手表所说的那样。

【问题讨论】:

【参考方案1】:

读取 Visible 属性可为您提供控件的实际可见性状态,而不是“预期”状态。在 InitializeComponent() 方法中始终为 false,直到 Load 事件运行后,表单或控件才可见。如果容器控件不可见,它也会为 false。

【讨论】:

哇,用这种方式引入错误真的很容易。我设置 Visible 并将其放在下一行的 if() 中,认为这将是我刚刚设置的值。邪恶的东西! @atticae:Microsoft 在 .net 中以某种方式做某事的事实并不总是意味着这是一个好主意。微软似乎无法决定是否有一个属性来说明是否可以看到某物,或者某物是否允许自己被看到;实际上,如果属性被赋予不同的名称,它们会很有用,但无论出于何种原因,Microsoft 决定拥有一个名为 Visible 的属性,它的 getter 返回第一个东西,而它的 setter 控制第二个东西。一些 1970 年代的计算机在设计中存在这样的问题,但人们从不学习......【参考方案2】:

如果表单尚未加载,它可能仍会显示为 false。尝试在 Form 的 OnLoad 事件中设置它。

【讨论】:

实际实用的解决方案,谢谢!

以上是关于为啥在 UserControl 中没有正确更新 Visible 属性?的主要内容,如果未能解决你的问题,请参考以下文章

vue中v-for循环的时候为啥要添加:key属性

为啥我不能在我的 UserControl 中重置 TextBox 的背景?

为啥 UserControl 的 Unloaded 事件不会触发?

为啥我在 UITableCellView 中的 UIView 中的 UILabel 在正确的数据库调用后没有更新(似乎与单元重用有关)?

vue.js - v-for 中动态生成的组件没有正确更新绑定属性

为啥在数据模板中使用 xaml UserControl 时无法绑定到依赖属性? [复制]