bre*_*dan 31
不幸的是没有这样的事件.您可以在Loaded Method中使用布尔值来确保您的东西仅触发一次 -
if(!IsSetUp)
{
MySetUpFunction();
IsSetUp = true;
}
Run Code Online (Sandbox Code Playgroud)
在这里查看WPF Windows生命周期事件:
http://msdn.microsoft.com/en-us/library/ms748948.aspx#Window_Lifetime_Events
alt text http://i.msdn.microsoft.com/dynimg/IC155674.png
作为存储布尔标志的替代方法,您可以使用扩展方法并将包装委托给伪造Loaded仅触发一次.
public static void OnLoadedOnce(
this UserControl control,
RoutedEventHandler onLoaded)
{
if (control == null || onLoaded == null)
{
throw new ArgumentNullException();
}
RoutedEventHandler wrappedOnLoaded = null;
wrappedOnLoaded = delegate(object sender, RoutedEventArgs e)
{
control.Loaded -= wrappedOnLoaded;
onLoaded(sender, e);
};
control.Loaded += wrappedOnLoaded;
}
...
class MyControl : UserControl
{
public MyControl()
{
InitializeComponent();
this.OnLoadedOnce(this.OnControlLoaded /* or delegate {...} */);
}
private void OnControlLoaded(object sender, RoutedEventArgs e)
{
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
如果您不想使用布尔方法来做事,那么您可以创建一个方法并Loaded用它订阅事件,然后在该方法结束时取消订阅。
例子:
public MyDependencyObject(){
Loaded += OnLoaded;
}
private void OnLoaded(object sender, EventArgs args){
DoThings();
Loaded -= OnLoaded;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18192 次 |
| 最近记录: |