wpf - modales - ventana modal c#
WPF-Expandir ventana a la izquierda (4)
Tengo una ventana WPF con panel expandible (a través de Expander
). El panel está en el lado izquierdo de la ventana, y cuando se expande, la ventana crece para ajustarse al contenido.
De forma predeterminada, las ventanas están ancladas a la esquina superior izquierda, por lo que mi ventana crece hacia la derecha. Me gustaría que la ventana crezca hacia la izquierda.
Traté de hacer lo siguiente en el evento Window.SizeChanged
:
private void onWindowSizeChanged(object sender, SizeChangedEventArgs e)
{
Left -= (e.NewSize.Width - e.PreviousSize.Width)
}
y funciona, pero el crecimiento es desigual, y me gustaría encontrar una solución más suave.
Logré superar esto usando una solución simple: Hide & Show.
Aquí está el código:
protected override void OnRenderSizeChanged(SizeChangeInfo sizeInfo)
{
if (!sizeInfo.WidthChanged)
{
base.OnRenderSizeChanged(sizeInfo);
return;
}
Hide();
base.OnRenderSizeChanged(sizeInfo);
Left -= (sizeInfo.NewSize.Width - sizeInfo.PreviousSize.Width);
Show();
}
Window.SizeChanged
controlador de eventos de Window.SizeChanged
con esta modificación de FrameworkElement.OnRenderSizeChanged
.
Puede poner su expansor en una cuadrícula (donde el tamaño de la columna puede cambiar) y luego establecer la propiedad ExpandDirection de su expansor a la izquierda?
Solución 1
Intente utilizar la propiedad Window: SizeToContent = "width", esto escalará su ventana al tamaño de su contenido y podrá escalar su contenido mediante animación y suavizado, esto hará que la escala de la ventana sea agradable y fluida.
Solución 2
Puede crear una ventana que sea más grande que su contenido y hacer que su fondo sea transparente. Aún debe agregar el fondo a algún elemento.
Aquí hay un ejemplo de cómo puede verse:
No he intentado hacer que una ventana crezca hacia la izquierda como lo que está solicitando, pero si todo lo demás falla, consideraría crear un botón para que se vea como el botón expansor. Luego, en lugar de tratar de hacer que su Ventana crezca hacia la izquierda, haga que una nueva Ventana crezca a la izquierda de su Ventana principal usando Transformaciones.
ACTUALIZAR
Bueno, el rendimiento de renderización pobre podría estar relacionado con la tarjeta de video, el diseño (demasiado complejo) o ambos. Tengo una idea que podría hacer el truco para ti. Jeff Prosise escribió en su blog sobre una lupa en Silverlight que usa un WriteableBitmap
para lograr el efecto deseado. Pensé: "¿por qué no utilizar un WriteableBitmap para crear una captura de pantalla de su diseño a la derecha del expansor y cubrir los otros elementos con él?". Creo que si haces esto y ocultas los elementos subyacentes (para que no se ajusten), el rendimiento de la representación mejorará mucho.
Tengo el código de Jeff para trabajar en WPF con pequeñas modificaciones.