.net 确保控件具有WPF中的大小:奇怪的问题
我在WPF画布上遇到了一些奇怪的问题,我无法解决,希望你们中的一些大师能够:) 情况是这样的:在我的应用程序中,当用户单击列表中的项目时,我会创建一个新画布,用元素填充它,并将其作为选项卡添加到tabcontrol中 这里出现了问题:我想以某种方式在画布上排列项目,但要做到这一点,我需要知道画布的大小。因为我刚刚创建了画布并将其放置到位,所以它还没有大小。所以我要做的就是对它调用“UpdateLayout()” 这给了它正确的大小,但当事情开始出错时:只要我调用UpdateLayout(),应用程序CPU的使用率就会猛增到100%(但UI仍然保持响应,并且不是我的任何代码造成的),画布内的所有控件都停止响应事件 你知道会发生什么吗.net 确保控件具有WPF中的大小:奇怪的问题,.net,wpf,.net,Wpf,我在WPF画布上遇到了一些奇怪的问题,我无法解决,希望你们中的一些大师能够:) 情况是这样的:在我的应用程序中,当用户单击列表中的项目时,我会创建一个新画布,用元素填充它,并将其作为选项卡添加到tabcontrol中 这里出现了问题:我想以某种方式在画布上排列项目,但要做到这一点,我需要知道画布的大小。因为我刚刚创建了画布并将其放置到位,所以它还没有大小。所以我要做的就是对它调用“UpdateLayout()” 这给了它正确的大小,但当事情开始出错时:只要我调用UpdateLayout(),应用
编辑:进一步检查后,我发现问题不是“UpdateLayout()”本身造成的,它实际上发生在我调用ActualWidth或ActualHeight时,而不是调用UpdateLayout,将您的排列代码包装在一个
调度程序中。BeginInvoke
,因此,它将在短时间后进行评估。不要调用UpdateLayout,而是将排列代码包装在Dispatcher.BeginInvoke
中,以便在短时间后对其进行评估。您可以使用调试器中断进程并转储堆栈跟踪吗?它可能是一个无限循环,例如由于大小计算中的重复。我将使用事件画布。加载并将带有子控件初始化的代码放在那里(到事件处理程序)。因为除非控件可见,否则无法接收其大小。请注意,如果初始化为折叠,画布可能仍会接收已加载的事件,但尚未确定其大小。在本例中,您可以等待LayoutUpdated事件。我进一步调查发现,实际上并不是调用UpdateLayout导致问题,而是在调用UpdateLayout后在画布上调用“ActualWidth”或“ActualHeight”导致问题@Simon Mourier:我必须承认我不是在.NET中调试的专家,我该如何转储堆栈跟踪并检查它?你能使用调试器中断进程并转储堆栈跟踪吗?它可能是一个无限循环,例如由于大小计算中的重复。我将使用事件画布。加载并将带有子控件初始化的代码放在那里(到事件处理程序)。因为除非控件可见,否则无法接收其大小。请注意,如果初始化为折叠,画布可能仍会接收已加载的事件,但尚未确定其大小。在本例中,您可以等待LayoutUpdated事件。我进一步调查发现,实际上并不是调用UpdateLayout导致问题,而是在调用UpdateLayout后在画布上调用“ActualWidth”或“ActualHeight”导致问题@Simon Mourier:我必须承认我不是在.NET中调试的专家,我如何转储堆栈跟踪并检查它?