“关闭设置”对话框会导致应用程序退出

时间:2015-04-22 17:18:13

标签: wpf vb.net xaml

所以这里是设置。我有一个独立的WPF应用程序,我用VB构建。应用程序中包含两个窗口query.AddEntityMainWindow,它们作为对话框打开,并在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>

更新

看起来这个问题与MainWindowApplication.xaml.vb的实例是Public Shared的事实有关,但我需要能够从其他地方调用该实例实时更新设置,所以我无法改变这一点。解决方法?

此外,该程序现在可以在Visual Studio外部正常运行,不再崩溃。

1 个答案:

答案 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