gpt4 book ai didi

wpf - 如何在WPF窗口中触发Usercontrol的Unload事件

转载 作者:行者123 更新时间:2023-12-03 14:43:29 29 4
gpt4 key购买 nike

我在WPF中有一个UserControl:

<UserControl x:Class="XLogin.DBLogin"
x:Name="DBLoginUserFrame"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
Height="263"
Width="353"
Loaded="DBLoginUserFrame_Loaded"
Unloaded="DBLoginUserFrame_Unloaded">
<Grid>
<GroupBox Header="Database Connection"
HorizontalAlignment="Left"
Height="243"
Margin="10,10,0,0"
VerticalAlignment="Top"
Width="333">
<Grid>
<TextBox x:Name="TextUserDB"
HorizontalAlignment="Left"
Height="20"
Margin="101,60,0,0"
TextWrapping="Wrap"
VerticalAlignment="Top"
Width="173" />
<Label Content="Password:"
HorizontalAlignment="Left"
Height="24"
VerticalAlignment="Top"
Width="70"
HorizontalContentAlignment="Right"
Margin="10,85,0,0" />
<PasswordBox x:Name="TextPasswordDB"
HorizontalAlignment="Left"
Height="20"
Margin="101,89,0,0"
VerticalAlignment="Top"
Width="173" />
<Button x:Name="BtnConnect"
Content="Connetti"
Height="29"
Width="123"
Margin="101,152,97,24"
Click="BtnConnect_Click" />
</Grid>
</GroupBox>

</Grid>
</UserControl>


当我卸载此控件时,WPF引发事件DBLoginUserFrame_Unloaded,该事件保存了我的设置并完成了一项工作。

我在WPF中有MainWindow可以加载此用户控件,但是当窗口关闭时,我的usercontrol UNLOAD不会触发:

<Window x:Class="XLogin.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
xmlns:local="clr-namespace:XLogin" Unloaded="Window_Unloaded_1">
<Grid>
<local:DBLogin/>
</Grid></Window>


如何将UserControl Unload事件添加到MainWindow事件处理程序?

最佳答案

documentation

“请注意,在应用程序开始关闭后,不会引发Unloaded事件。当ShutdownMode属性定义的条件发生时,应用程序就会关闭。如果您将清除代码放在Unloaded事件的处理程序中,例如Window或UserControl ,它可能未如预期那样被调用。”

如果关闭Window触发应用程序关闭,则可能是原因。在这种情况下,甚至可能不会调用Window的Unload事件,因此我相信最好依赖Window.Closing事件。

处理UserControl卸载时执行的任务的一种方法是公开控件的卸载处理程序方法(“ DBLoginUserFrame_Unloaded”),在MainWindow中命名UserControl实例,然后从Window.Closing事件中调用它。

public MainWindow()
{
// Add this
this.Closing += MainWindow_Closing;
}

void MainWindow_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
this.MyUserControl.MethodToBeCalledWhenUnloaded().
}


另一个选择是保持目前的实现,但还要在您的UserControl中添加Dispatcher.ShutdownStarted事件的处理程序,如 here所述。

public MyUserControl()
{
this.Dispatcher.ShutdownStarted += Dispatcher_ShutdownStarted;
}

关于wpf - 如何在WPF窗口中触发Usercontrol的Unload事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14479038/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com