En mi aplicación WPF, tengo un ListView en el formulario principal que muestra datos encuadernados desde un DataSet. Cuando un usuario hace doble clic en una fila en el ListView, abre una ventana de detalles.Nueva ventana de WPF solo muestra debajo de la ventana de origen
En mi XAML, que utilizan un estilo para crear un controlador haga doble clic en la vista de lista:
<Style x:Key="ListViewDoubleClick" TargetType="{x:Type ListViewItem}">
<EventSetter Event="MouseDoubleClick" Handler="HandleDoubleClick" />
</Style>
...
<ListView Name="searchResults" ItemContainerStyle="{StaticResource ListViewDoubleClick}>
En el código subyacente, tengo un diccionario que realiza un seguimiento de los detalles de las ventanas abiertas (múltiple puede estar abierto a la vez) de modo que si una ventana de detalle ya está abierta, se lleva al frente. Yo manejo el doble clic, así:
private void HandleDoubleClick(object sender, MouseEventArgs e)
{
DataRowView clickedRow = ((ListViewItem)sender).Content as DataRowView;
int row = (int)clickedRow.Row["ID"];
if (!displayedCards.ContainsKey(row))
{
DetailWindow window = new DetailWindow(RetrieveData(row));
//window.Owner = this;
displayedCards.Add(row, window);
window.Show();
}
else
{
displayedCards[row].Activate();
}
}
Mi problema es que con el código como es arriba, se abren las ventanas de detalles detrás de la forma principal. Si configuro la información del propietario (window.Owner = this
), las ventanas de detalles se abren sobre el formulario principal, pero el formulario principal nunca puede aparecer frente a las ventanas de detalles.
El displayedCards[row].Activate()
funciona como esperaba, llevando esa ventana de detalle al frente de todas las demás ventanas de detalles, pero es víctima del mismo problema que el anterior: no se encuentra frente a la ventana principal.
Lo que quiero lograr es tener las ventanas de detalles en el mismo nivel/capa (¿orden z?) Como la ventana principal para que ambas puedan aparecer una encima de la otra, y para que aparezcan las ventanas de detalles en la parte superior de la forma principal cuando se abren.
Editar: Si es importante, la ventana de detalles no tiene WindowStyle
y AllowsTransparency
se establece en true. Tampoco tengo un título de ventana y la ventana no aparece en la barra de tareas. Al tratar de resolver esto, intenté configurar el WindowStyle
en SingleBorderWindow
, y ocurre el mismo problema, excepto que el borde de la ventana de detalles se muestra en la parte superior del formulario principal mientras se dibuja la ventana de detalles, y luego se empuja hacia atrás la forma principal. ¿Podría mi manejador de doble clic esencialmente tirar del formulario principal hacia adelante después de que se muestre la ventana de detalles?
Eso es lo que hizo: agregar 'e.Handled = true;' al comienzo de mi controlador de doble clic ahora hace que todas las ventanas funcionen como esperaba. ¡Gracias! –
me salvaste! meses mis clientes se quejaban de que los clics dobles se están abriendo y ocultando sus ventanas. ¡gracias cien veces! –