WPF Дочерняя проблема Windows в Windows XP - PullRequest
0 голосов
/ 18 сентября 2011

Я написал программу WPF, которая, когда пользователь нажимает кнопку, открывается новое окно.

Я пытался показать новое окно с помощью Show () или Функция ShowDialog () .

В Windows 7 , когда пользователь закрыл дочернее окно, главное окно останется, и программа не выйдет.Это поведение, которое я хочу иметь.

Однако, когда программа запускается в Windows XP , когда пользователь закрыл дочернее окно, главное окно будет закрыто вместе, и вся программабудет завершен.

Я попытался установить другое значение в разных свойствах в классе Windows, наконец, я обнаружил, что программа не выйдет, только когда я установлю для свойства "ShowInTaskbar" значение "False" в дочернем окне.

Однако, если для ShowInTaskbar задано значение false, пользователь не может найти запись на панели задач, которая не соответствует желаемому поведению.

Что я хочу получитьэто действительно просто.Я просто хочу, чтобы программа, работающая в Windows XP, имела то же поведение, что и программа, работающая в Windows 7, когда пользователь закрывал дочернее окно (т. Е. Главное окно не закрывалось, когда пользователь закрывало дочернее окно ).Кроме того, я хочу иметь запись в панели задач для вновь созданного дочернего окна (т.е. ShowInTaskbar = true ).

Кто-нибудь имеет какие-либо идеи по поводу этой проблемы?

MainWindow

<Window x:Class="ChildWindowTest.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">
<Grid>
    <Button Click="OpenChild">Open Child Window</Button>
</Grid>
</Window>

Код для MainWindow:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void OpenChild(object sender, RoutedEventArgs e)
    {
        ChildWindow child = new ChildWindow();
        child.Owner = this;
        //child.ShowInTaskbar = false; <--- if comment, the program will exit, when child window closed
        child.Show();
    }
}

Дочернее окно:

<Window x:Class="ChildWindowTest.ChildWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="ChildWindow" Height="300" Width="300">
<Grid>

</Grid>

Код для дочернего окна:

public partial class ChildWindow : Window
{
    public ChildWindow()
    {
        InitializeComponent();
    }
}

Ответы [ 2 ]

1 голос
/ 19 сентября 2011

Совсем не элегантное решение, но вы всегда можете подписаться на событие Closing в классе Application и отменить закрытие приложения в обработчике события.

0 голосов
/ 19 сентября 2011

Перед тем, как вызвать childWindow.ShowDialog()?

, убедитесь, что вы правильно установили childWindow.Owner в качестве главного окна.
...