2011-08-18 89 views
6

Tengo una ventana wpf con dos controles de usuario dentro de los cuales el segundo solo se muestra cuando es necesario. Solo configuro el MinWidth de la ventana en XAML, el MinHeight se proporciona a través de un enlace de datos, dependiendo de si se muestra el segundo control de usuario. Ahora: ¿Cómo puedo establecer el tamaño de la ventana a valores diferentes a MinWidth/Height durante el tiempo de ejecución? Intenté configurar los valores antes del Show(), después del Show(), en varios eventos (Initialized, Loaded, etc.). Intenté con y sin UpdateLayout(), traté de configurar el alto/ancho a través de enlace de datos. ¡Nada funciona! Pero cuando depuro los enfoques, veo que las propiedades Altura/Ancho de la ventana se establecen en los valores esperados, pero permanecen ActualHeight/Width. Pensé que sería una bagatela, pero resultó que no es (para mí). Thy por cualquier ayuda.Cambiar el tamaño de la ventana wpf programáticamente en C#

+0

Eso suena un poco raro. Las ventanas deben respetar sus configuraciones de ancho y alto. ¿Podría publicar un pequeño ejemplo? – Jens

+0

¿Es posible que tenga 'Window.SizeToContent' establecido en algo que no sea' Manual'? Si es así, 'Ancho' y/o 'Altura' se desacoplarán efectivamente de 'ActualWidth' y' AcutalHeight'. – dlf

Respuesta

8

¿Ha intentado ajustar

Application.Current.MainWindow.Height = 100; 

Además corta: Acabo de hacer una prueba corta, en código:

public partial class MainWindow : Window, INotifyPropertyChanged 
{ 

    private int _height; 
    public int CustomHeight 
    { 
     get { return _height; } 
     set 
     { 
      if (value != _height) 
      { 
       _height = value; 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArgs("CustomHeight")); 
      } 
     } 
    } 

    public MainWindow() 
    { 
     InitializeComponent(); 
     this.DataContext = this; 
     CustomHeight = 500; 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void Button_Click(object sender, RoutedEventArgs e) 
    { 
     CustomHeight = 100; 
    } 
} 

y el XAML:

<Window x:Class="WindowSizeTest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="{Binding CustomHeight, Mode=TwoWay}" Width="525"> 
<Grid> 
    <Button Click="Button_Click">Test</Button> 


</Grid> 

Haga clic en el botón establece el altura de la ventana ¿Es eso lo que estás buscando?

1

No se ha dado mucha información, así que solo estoy adivinando aquí.

La única forma en que pude reproducir la ventana sin respetar su configuración de ancho y alto fue cuando establecí SizeToContent en WidthAndHeight.

1

si alguien todavía está luchando con esto, lo único que tiene que hacer es la siguiente:

Si desea cambiar el tamaño de la ventana principal acaba de escribir el siguiente código.

Application.Current.MainWindow.Height = 420; 

Si desea cambiar el tamaño de una ventana nueva que no sea la ventana principal acaba de escribir el siguiente código en el archivo .cs de la nueva ventana.

Application.Current.MainWindow = this; 
Application.Current.MainWindow.Width = 420; 

Espero que ayude.

Cuestiones relacionadas