Solo quiero permitir que mi ventana WPF cambie de tamaño horizontalmente. ¿Cuál es la mejor manera de lograrlo?Ventana WPF: solo permite el cambio de tamaño horizontal
Respuesta
Si establece los MinHeight
y MaxHeight
atributos de la ventana a la altura deseada de la ventana tendrá una altura fija
Funciona bien ... tan obvio cuando lo piensas. Gracias –
Desafortunadamente incompatible con el cálculo automático de altura basado en el tamaño del contenido. –
Es un poco doloroso. Básicamente, debe configurar una función de enlace para procesar los mensajes de Windows. A continuación, verás el mensaje WM_SIZING (0x0214) y modificarás los parámetros para que no se pueda cambiar la dimensión horizontal.
Pete Brown también tiene mucha información excelente sobre este tema en su blog.
Puede probar la vinculación de datos con el tamaño de la ventana y luego volver a establecer el tamaño en el valor anterior siempre que se modifique la dimensión vertical.
El único inconveniente es que se trata de la publicación. – Amsakanna
Es cierto. Pero en la mayoría de los casos, sospecho que será lo suficientemente rápido para que el usuario no lo note. –
Si desea utilizar el enfoque MinHeight
y MaxHeight
pero aún así permitir que la ventana de tamaño automáticamente para ajustarse al tamaño de su contenido:
<Window x:Class="MyWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
SizeToContent="WidthAndHeight"
ResizeMode="CanResize"
Loaded="window_Loaded">
En código subyacente:
private void window_Loaded(object sender, RoutedEventArgs e)
{
this.MinWidth = this.ActualWidth;
this.MinHeight = this.ActualHeight;
this.MaxHeight = this.ActualHeight;
}
Así como Tim Richards recomienda, tuve que moverme al configurar las propiedades 'MinHeight' y' MaxHeight' en el evento 'ContentRendered' después de notar que el borde inferior de un' TextBox' y 'Button' estaban siendo recortados en una' Grid' contenida dentro de un 'GroupBox'. –
Si desea utilizar el enfoque MinHeight y MaxHeight pero aún permite que la ventana se ajuste automáticamente al tamaño de su contenido:
Para permitir el dimensionamiento automático del contenido, no use el evento Loaded. Use el evento ContentRendered en su lugar.
¿Podría pegar el origen de esta cita? – Tomasito
Si usted tiene los siguientes requisitos: * Ancho usuario puede cambiar el tamaño (ResizeMode = CanResize) * Altura está dimensionada de forma automática (SizeToContent = Altura)
no va a funcionar por dos razones: * existe no es ResizeMode = CanResizeHeight * cuando el usuario cambia el tamaño de la ventana, reducirá SizeToContent a "Manual"
Un simple truco que utilizo es forzar constantemente "SizeToContent" a mi valor deseado.
<Window x:Class="MyWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
SizeToContent="Height"
ResizeMode="CanResize"
LayoutUpdated="LayoutUpdated">
private void LayoutUpdated(object sender, EventArgs e)
{
SizeToContent = SizeToContent.Height;
}
También puede usar el evento ContentRendered. El evento PropertyChanged no funcionará. Esto no es perfecto, ya que el usuario aún puede mover el cursor verticalmente, y causará cierto parpadeo si se hace rápidamente.
La siguiente solución le permite dejar intacta SizeToContent
,
no requiere Win32 Interop
o código detrás de su ventana:
lo hace se basan en Reactive Extensions
En el plazo Package Manager
:
Install-Package System.Reactive
Luego empiezas creando una nueva Behavior
:
public class VerticalResizeWindowBehavior : Behavior<UIElement>
{
public static readonly DependencyProperty MinHeightProperty = DependencyProperty.Register("MinHeight", typeof(double), typeof(VerticalResizeWindowBehavior), new PropertyMetadata(600.0));
public double MinHeight
{
get { return (double)GetValue(MinHeightProperty); }
set { SetValue(MinHeightProperty, value); }
}
protected override void OnAttached()
{
base.OnAttached();
var window = Window.GetWindow(AssociatedObject);
var mouseDown = Observable.FromEventPattern<MouseButtonEventArgs>(AssociatedObject, "MouseLeftButtonDown")
.Select(e => e.EventArgs.GetPosition(AssociatedObject));
var mouseUp = Observable.FromEventPattern<MouseButtonEventArgs>(AssociatedObject, "MouseLeftButtonUp")
.Select(e => e.EventArgs.GetPosition(AssociatedObject));
var mouseMove = Observable.FromEventPattern<MouseEventArgs>(AssociatedObject, "MouseMove")
.Select(e => e.EventArgs.GetPosition(AssociatedObject));
var q = from start in mouseDown
from position in mouseMove.TakeUntil(mouseUp)
select new { X = position.X - start.X, Y = position.Y - start.Y };
mouseDown.Subscribe(v => AssociatedObject.CaptureMouse());
mouseUp.Subscribe(v => AssociatedObject.ReleaseMouseCapture());
q.ObserveOnDispatcher().Subscribe(v =>
{
var newHeight = window.Height + v.Y;
window.Height = newHeight < MinHeight ? MinHeight : newHeight;
});
}
}
Luego se agrega una UIElement
en la parte inferior de la ventana y aplicar los Behavior
:
<Border Background="Gray"
Height="10"
Cursor="SizeNS"
Grid.ColumnSpan="2">
<i:Interaction.Behaviors>
<b:VerticalResizeWindowBehavior MinHeight="600"/>
</i:Interaction.Behaviors>
</Border>
establezca las siguientes propiedades en la ventana:
ResizeMode="NoResize"
SizeToContent="Width"
Nota: En este ejemplo , el usuario puede cambiar el tamaño Vertically
pero no Horizontally
Puede cambiar fácilmente el código para permitir el opp osite, o agregue las propiedades
para que sea configurable.
- 1. Tamaño de ventana de WPF
- 2. ocultar el agarre de cambio de tamaño predeterminado en wpf
- 3. ¿Cómo atrapar la ventana de cambio de tamaño final?
- 4. Tamaño de configuración de la aplicación wpf/caliburn.micro mientras permite que el contenido cambie de tamaño con la ventana principal.
- 5. Cambio de tamaño dinámico de una ventana en Xaml
- 6. WPF: evento de cambio de tamaño GridViewColumn
- 7. Permitir el cambio de tamaño de la ventana pyGame
- 8. Ancho mínimo en el cambio de tamaño de la ventana
- 9. Desactivar el cambio de tamaño de navegador Silverlight 4 Ventana
- 10. Cambiar el tamaño de la ventana wpf programáticamente en C#
- 11. WPF: Alineación horizontal
- 12. ¿Cómo cambiar el tamaño SOLO horizontal o verticalmente con jQuery UI de tamaño variable?
- 13. Habilitar maximizar, minimizar y restaurar la ventana en WPF (cambio de tamaño manual es deshabilitar)
- 14. Evento WPF FileDrop: solo permite una extensión de archivo específica
- 15. WPF Tamaño de la cuadrícula
- 16. cambio de tamaño de la cuadrícula al cambiar el tamaño de la ventana del navegador
- 17. emergente de código subyacente en WPF que no trabaja (en cambio de tamaño y el cambio de ventanas)
- 18. Gridpanel cambio de tamaño automático en el tamaño de la ventana
- 19. ¿Cómo vincular el cambio de tamaño de escenario con el cambio de tamaño de los componentes?
- 20. WPF horizontal DataGrid
- 21. CSS: ¿solo desbordamiento horizontal?
- 22. Android, solo orientación horizontal?
- 23. ¿Cómo obtener un tamaño de cliente de ventana de WPF?
- 24. android: Cómo evitar el cambio de tamaño de la ventana cuando se muestra el teclado virtual
- 25. WPF: ¿Cómo animar el cambio de color?
- 26. WPF barra de desplazamiento para una ventana de tamaño variable
- 27. iPhone: permite la orientación horizontal en solo un controlador de vista
- 28. Problema de rendimiento WPF al cambiar el tamaño de la ventana con muchos controles
- 29. Prevenir Cambio de foco de ventana
- 30. ¿Cómo hacer que el mensaje de Tkinter se amplíe cuando cambio el tamaño de la ventana?
Guau, pensé que configurar MinHeight, Height y MaxHeight con el mismo valor funciona pero no es así. Bueno saber. – DHN