2013-03-05 10 views
5

Ist es irgendwie möglich, Window.SizeToContent zu beschränken, um die Größe nur zu erweitern?Window.SizeToContent beschränken, um nur zu erweitern

Ich habe ein allgemeines Fenster, das dynamisch mit Inhalt in TabControl gefüllt wird. Da zu Beginn nicht bekannt ist, wie groß jedes TabItem sein soll, kann ich die erforderliche Größe (ich kümmere mich nur um die Höhe) nicht vorberechnen, um alles ohne Scrollen anzuzeigen.

Durch Aktivierung von SizeToContent wird die Größe automatisch an die erforderliche Größe angepasst, wenn die Registerkarte geändert wird. Obwohl es in Ordnung ist, dass es nur erweitert wird, wenn die aktuelle Ansicht mehr Platz benötigt, mag ich nicht, dass das Fenster auch schrumpft, wenn weniger Platz benötigt wird. Ist es möglich, das SizeToContent Verhalten auf Erweiterung der Fenstergröße beschränken? Oder kann das Verhalten auf andere Weise emuliert werden, während immer noch korrekte Ergebnisse erzielt werden, wobei die Fensterrahmen und andere Komponenten neben dem Registersteuerelement berücksichtigt werden?

Ich habe versucht, in verschiedene Fensterereignisse einzuhaken, um herauszufinden, wohin die neue Größeninformation geht, wenn ich die Registerkarte ändere, aber das einzige wirklich nützliche Fenster, OnChildDesiredSizeChanged, erzeugte keine deterministischen Ergebnisse (für einige Registerkarten wurde es aufgerufen), für andere war es nicht). Hast du eine andere Idee?

+1

Wie wäre es, einfach eine Mindestgröße zu definieren? –

+1

@KevinDiTraglia Wie gesagt, das Fenster wird dynamisch mit Inhalt gefüllt. Und ich möchte dem Benutzer tatsächlich erlauben, die Größe zu ändern und sie kleiner zu machen. Ich möchte nur, dass die Standardgröße für den angezeigten Inhalt "perfekt" ist. – poke

Antwort

3

Sie können versuchen, FrameworkElement.MinHeight und FrameworkElement.MinWidth verwenden, um die minimale Höhe/Breite einzustellen, nachdem die Window geladen hat.

public void WindowLoaded() 
{ 
    this.MinHeight = this.ActualHeight; 
    this.MinWidth = this.ActualWidth; 
} 
3

Ich versuchte Bobs Ansatz. Seine Antwort ist der richtige Ansatz.

In meinem Fall das WindowLoaded-Ereignis zu früh ausgelöst. Es wurde gefeuert, bevor der Inhalt gerendert wurde.

Daher habe ich das "ContentRendered" -Ereignis verwendet und jetzt mein Fenster wird nicht verkleinern, wenn die Inhaltsgröße reduziert wird. Wenn Ihr Inhalt nach dem erstmaligen Anzeigen der Fenster möglicherweise vergrößert wird, können Sie das Ereignis "SizeChanged" verwenden.

Verwandte Themen