En una aplicación de WPF me gustaría poner en práctica el siguiente comportamiento que no parece funcionar sencillo:¿Cómo implementar correctamente un diálogo modal en la parte superior de un diálogo no modal?
Desde la ventana principal (Window1
) el usuario abre una ventana no modal (Window2
), y que no la ventana modal puede mostrar un cuadro de diálogo modal (Window3
).
El problema es que cada vez que se muestra el diálogo modal, la ventana principal desaparece en el fondo (dado que hay ventanas de otras aplicaciones abiertas) cuando el usuario cierra los cuadros de diálogo.
¿Hay algún problema en la forma en que uso Window.Owner
y Window.Show()
/Window.ShowDialog()
, es un error o simplemente no es compatible?
La siguiente sencilla aplicación WPF muestra este comportamiento:
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Window2 win = new Window2();
win.Owner = this;
win.Show();
}
}
public partial class Window2 : Window
{
public Window2()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
Window3 win = new Window3();
win.Owner = this;
win.ShowDialog();
}
private void btnClose_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
}
public partial class Window3 : Window
{
public Window3()
{
InitializeComponent();
}
private void btnClose_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
}
XAML Window1
:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1">
<Button Click="Button_Click">Show non-modal window</Button>
</Window>
XAML Window2
:
<Window x:Class="WpfApplication1.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window2">
<StackPanel>
<Button Click="Button_Click">Show modal dialog</Button>
<Button Name="btnClose" Click="btnClose_Click">Close</Button>
</StackPanel>
</Window>
XAML Window3
:
<Window x:Class="WpfApplication1.Window3"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window3">
<Button Name="btnClose" Click="btnClose_Click">Close</Button>
</Window>
ACTUALIZACIÓN: Copia fija & pegue el error en el código. Esto es .NET 3.5 SP1 en caso de que importe.