所以这里是设置。我有一个独立的WPF应用程序,我用VB构建。应用程序中包含两个窗口query.AddEntity
和MainWindow
,它们作为对话框打开,并在SettingsWindow
的子程序中通过单击"设置&#34来调用;按钮(如果我可以帮助它,我喜欢使用代码隐藏优于XAML)。
在MainWindow.xaml.vb
中,我有一个子程序处理单击窗口中的关闭按钮的事件。它执行SettingsWindow.xaml.vb
。目的是关闭Me.Close()
并将焦点返回到SettingsWindow
,但整个应用程序终止。
此外,单击MainWindow
中的关闭按钮会关闭MainWindow
,但不会在Visual Studio的调试模式下终止应用程序,而关闭MainWindow
则会关闭SettingsWindow
。
构建应用程序并在Visual Studio之外运行它(在Windows中运行.exe本身)时,关闭SettingsWindow
将按预期返回MainWindow
,但尝试重新打开SettingsWindow
导致整个应用程序崩溃。
我对Visual Studio比较陌生,我可以根据需要发布代码。提前感谢您的帮助。
首先,这是我的`Application.xaml.vb'文件处理应用启动:
Class Application
Public Shared initmain As MainWindow = New MainWindow()
Public Shared Sub AppStart() Handles Me.Startup
initmain.UpdateSettings()
initmain.Show()
End Sub
End Class
上面的代码检查My.Settings
,工作正常,然后打开MainWindow
。
以下是MainWindow
子调用SettingsWindow
中的代码:
Private Sub SettingStart() Handles SettingsButton.MouseUp
Dim SettingWin As SettingsWindow = New SettingsWindow()
' "If" blocks here that check My.Settings before opening the window
SettingWin.ShowDialog()
End Sub
最后,这是关闭SettingsWindow
的代码:
Private Sub CloseButtonClick() Handles CloseButton.MouseUp
Me.Close()
End Sub
如果您需要,请点击Application.xaml
:
<Application x:Class="Application"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="AppStart">
<Application.Resources>
</Application.Resources>
</Application>
更新
看起来这个问题与MainWindow
中Application.xaml.vb
的实例是Public Shared
的事实有关,但我需要能够从其他地方调用该实例实时更新设置,所以我无法改变这一点。解决方法?
此外,该程序现在可以在Visual Studio外部正常运行,不再崩溃。
答案 0 :(得分:0)
你需要设置ShutdownMode =&#34; OnLastWindowClose&#34;在Application.xaml
中<Application x:Class="Application"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="MainWindow.xaml"
ShutdownMode="OnLastWindowClose" >
<Application.Resources>
</Application.Resources>
</Application>
MainWindow.xaml.vb
Class MainWindow
Private Sub ButtonSetting_Click(sender As Object, e As RoutedEventArgs) Handles ButtonSetting.Click
Dim SettingWin As SettingWindow = New SettingWindow()
Dim rslt As Boolean = False
rslt = SettingWin.ShowDialog()
End Sub
End Class