当我执行以下步骤时,我的应用程序的主窗体在设计器中不断变为白色:
1)在设计模式下打开窗体(此时所有控件均可见) 2)查看窗体的源代码3)切换回设计视图
执行完上述步骤后,在设计模式下看不到窗体(甚至窗体)的任何内容。我在我的应用程序中只有一个表单有这个问题,不幸的是,它是我的主表单,其中有很多逻辑。解决方法是始终关闭窗体,然后在设计模式下重新打开它,显示所有组件再次可见。当我的可用内存不足时,我遇到过设计器的不稳定错误,但这个表单总是会产生这种症状,而且是唯一的症状。你知道这是什么原因造成的吗?我想我总是可以创建一个新的窗体,并尝试将所有的控件和逻辑移到上面,但是,如果有一个更简单的选择,我宁愿避免这项工作。
发布于 2012-09-03 23:52:01
诊断结果是控件的Paint事件或OnPaint方法行为不正常。这些方法在设计时运行,因此您将获得控件的准确可视化表示形式,例如,您可以在设计时查看PictureBox的图像属性。当这样的paint事件在循环中停滞时,整个窗体将停止正确呈现。除了一个简单的bug之外,典型的原因是代码在设计模式下被非标准的运行时环境搞混了。使用DesignMode属性可确保此类代码不会造成麻烦,并在设计模式下被禁用。
找到行为不端的代码是一个挑战,特别是当这些控件不是您自己编写的控件时。除了逐个删除控件来找到麻烦制造者之外,您还可以通过启动Visual Studio的另一个实例来使用调试器,并使用Tools + Attach to Process来附加到第一个实例。
发布于 2012-09-04 18:17:22
根据个人经验,我可以确认这是Visual Studio2003和2005中偶尔出现的问题,无论是使用VB还是C#。我们将两个版本都修补到了最新的服务包,甚至直接从微软获得了热修复程序,但这两种方法都没有解决问题。
以Visual Studio2003中的VB为例,控件的消失也移除了基础设计器代码,因此我们不得不从版本控制系统中恢复删除的代码。非常烦人--因为我们经常会丢失代码更改,并不得不重新开始。
发布于 2020-07-05 18:45:05
下面是来自该页面的一句话:
使用StarDefinitionsCanExceedAvailableSpace覆盖此设置的
将覆盖新的GridRendering行为,并且基本上允许您在项目中使用.NET 4.7.x目标运行,但保留以前版本中使用的旧行为。
可以在app.config中为您的应用程序设置一个配置设置:
<configuration>
<runtime>
<AppContextSwitchOverrides value="Switch.System.Windows.Controls.Grid.StarDefinitionsCanExceedAvailableSpace=true"
/>
</runtime>
</configuration>
我可以验证使用该开关可以让我运行4.7.1,并且在任何缩放模式下都看不到锁定。在我
让我的运行版本回到了4.6.2,我再次在一个单独的分支中升级到4.7.1来尝试这一点,果然切换使应用程序以4.7.1为目标运行。所以有一个棘手的变通方法。
不过,这是一种变通方法。根据微软的说法,这个“修复”改进了网格渲染分配,提供了更精确的大小,还提高了性能并减少了内存使用。理论上这是一个很大的进步,但是...好吧,副作用
我怀疑这个问题并不普遍,因为没有太多关于它的信息可以找到。我认为Markdown Monster之所以会出现这个问题,是因为启动序列有很多窗口操作。MM使用MahApps UI框架,该框架使用窗口动画和主窗口的额外渲染帧,MM本身将窗口移出屏幕进行初始渲染,并根据屏幕大小和DPI值调整窗口大小(如果窗口不适合屏幕或将在屏幕外显示)。实际上,比起简单的WPF表单,将初始窗口放到屏幕上需要进行一些旋转才更有可能出现这个bug。
所以我怀疑每个应用程序都需要担心这一点,但是如果你有一个4.7.xWPF应用程序,在不同的分辨率和比例级别下尝试一下可能是一个好主意,看看它的表现如何。
https://stackoverflow.com/questions/12249931
复制相似问题