【发布时间】:2011-10-01 02:27:17
【问题描述】:
我有一个用户控件。我有时再次遇到这种情况,但总是可以通过使用“New() contructor”来解决它。但是我仍然想知道我做错了什么,因为如果加载了控件,则必须触发 load 事件!
这里有一些代码:
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:my="clr-namespace:OUTPUT___VideoContent"
Title="OUTPUT - VideoContent" Height="350" Width="525" Icon="/OUTPUT%20-%20VideoContent;component/Images/VideoContent.png">
<Grid x:Name="LayoutRoot">
<Grid x:Name="VideoGrid">
<my:ucVideoPresenter x:Name="VideoPresenter1"/>
<TextBlock x:Name="txtInfo" Visibility="Collapsed" />
</Grid>
</Grid>
</Window>
在用户控件中,加载事件在 WPF 或 codebehing 上声明,但没有任何成功!
【问题讨论】:
-
你有没有发现问题出在哪里?我目前面临同样的问题。
-
不,我没有。我在 LayoutUpdated 事件中使用了自己的 booelan 来检查控件是否是第一次绘制的。在那种情况下,我会初始化一些东西,就像我在 Load 事件中做的那样。
-
该解决方案并不健康。其原因通常是在组件初始化期间引发的异常,并且在控件完成加载之前有效地停止初始化。除非您将初始化放在 try/catch 中,否则不会处理此类异常。而且你不会在调试器中注意到它,除了副作用是所有在异常之后初始化的控制器永远不会完全加载。因此,它们的加载事件永远不会被触发。您应该检查所有初始化代码是否存在异常,例如通过单步执行代码。
标签: wpf events event-handling load code-behind