2011-08-18 3 views
6

Ho una finestra wpf con due controlli utente all'interno dei quali il secondo viene mostrato solo quando necessario. Ho impostato solo il MinWidth della finestra in XAML, il MinHeight è fornito tramite l'associazione dei dati e un ist in base al se viene mostrato il secondo controllo us. Ora: come posso impostare la dimensione della finestra su valori diversi da MinWidth/Height durante il runtime. Ho provato a impostare i valori prima di Show(), dopo Show(), in vari eventi (Initialized, Loaded, ecc.). Ho provato con e senza UpdateLayout(), ho provato ad impostare l'altezza/larghezza tramite il databinding. Niente funziona! Ma quando eseguo il debug degli approcci, vedo che le proprietà Height/Width della finestra sono impostate sui valori previsti, ma ActualHeight/Width restano. Ho pensato che sarebbe stata una bagatella, ma si è scoperto che non è (per me). Tuo per qualsiasi aiuto.Ridimensionamento programmato di wpf in C#

+0

Sembra un po 'strano. Le finestre dovrebbero rispettare le tue impostazioni per larghezza e altezza. Potresti postare un esempio minuscolo? – Jens

+0

È possibile che 'WindowSizeToContent' sia impostato su un valore diverso da' Manual'? In tal caso, 'Width' e/o' Height' saranno disaccoppiati da 'ActualWidth' e' AcutalHeight'. – dlf

risposta

8

Hai provato a impostare

Application.Current.MainWindow.Height = 100; 

Oltre breve: Ho appena fatto un breve test, in codice:

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; 
    } 
} 

e 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> 

Fare clic sul pulsante per impostare il altezza della finestra. E 'questo quello che stai cercando?

1

Non hai dato molte informazioni, quindi sto solo indovinando qui.

L'unico modo per riprodurre la finestra senza rispettare le impostazioni di larghezza e altezza è stato quando ho impostato SizeToContent su WidthAndHeight.

1

se qualcuno è ancora alle prese con questo, l'unica cosa che dovete fare è il seguente:

Se si desidera ridimensionare la finestra principale basta scrivere il codice seguente.

Application.Current.MainWindow.Height = 420; 

Se si desidera ridimensionare una nuova finestra diversa dalla finestra principale basta scrivere il seguente codice nel file .cs della nuova finestra.

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

Spero che sia d'aiuto.