2011-08-18 9 views
6

Mam okno wpf z dwoma kontrolkami użytkownika, wewnątrz których drugi jest wyświetlany tylko w razie potrzeby. Ustawiam tylko MinWidth okna w XAML, MinHeight jest dostarczany przez zestaw danych i zestaw jest zależny od tego, czy pokazane jest drugie sterowanie użytkownika. Teraz: Jak ustawić rozmiar okna na wartości inne niż MinWidth/Height w czasie wykonywania. Próbowałem ustawić wartości przed Show(), po Show(), w różnych zdarzeniach (Initialized, Loaded, itp.). Próbowałem z i bez UpdateLayout(), próbowałem ustawić wysokość/szerokość poprzez wiązanie danych. Nic nie działa! Ale kiedy debuguję podejścia, widzę, że właściwości Wysokość/Szerokość okna są ustawione na wartości oczekiwane, ale wartość ActualHeight/Width pozostaje. Myślałem, że to będzie bagatelle, ale okazało się, że to nie jest (dla mnie). Twoje za jakąkolwiek pomoc.Zmienianie rozmiaru okna wpf programowo w C#

+0

To brzmi trochę dziwnie. Okna powinny respektować twoje ustawienia szerokości i wysokości. Czy mógłbyś opublikować przykład minowy? – Jens

+0

Czy możliwe jest ustawienie parametru 'Window.SizeToContent' na coś innego niż' Manual'? Jeśli tak, to 'Width' i/lub' Height' będą efektywnie oddzielone od 'ActualWidth' i' AcutalHeight'. – dlf

Odpowiedz

8

Próbowałeś ustawić

Application.Current.MainWindow.Height = 100; 

Krótki dodatek: Właśnie zrobiłem krótki test, w postaci kodu:

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

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

Kliknij przycisk Ustawia wysokość okna. Czy tego właśnie szukasz?

1

Nie masz wielu informacji, więc po prostu zgaduję.

Jedynym sposobem na odtworzenie okna niezgodnego z ustawieniem szerokości i wysokości było ustawienie SizeToContent na WidthAndHeight.

1

jeśli ktoś jest nadal zmaga się z tym, jedyną rzeczą, którą musisz zrobić to:

Jeśli chcesz zmienić rozmiar okna głównego po prostu napisać następujący kod.

Application.Current.MainWindow.Height = 420; 

Jeśli chcesz zmienić rozmiar nowego okna innego niż głównego okna wystarczy napisać następujący kod w pliku .cs nowego okna.

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

Mam nadzieję, że to pomaga.

Powiązane problemy