2017-11-15 7 views
0

Frage ist wie pro WPF: when I maximize my window, controls do not resize, die unbeantwortet ist.Steuerelemente nicht die Größe ändern, wenn maximiert, aber tun, wenn die Größe durch Ziehen geändert - wpf

Ich habe ein WPF-Formular mit einigen Steuerelementen, die an mindestens zwei Kanten des Formulars gebunden sind. Ich habe Code zum sizechanged Ereignis hinzugefügt, das Kontrollen als Verhältnis der Formgröße in der Größe einstellt. Der Code funktioniert gut und wenn die Größe des Formulars geändert wird, ziehen Sie die Größe der Steuerelemente richtig.

Wenn das Formular maximiert wird, wird die Größe der Steuerelemente nicht geändert. Sie werden vertikal auf den Steuerelementen gespeichert, die am oberen und unteren Rand des Fensters angebracht sind.

Ich habe einen ähnlichen Code zum statechanged Event hinzugefügt, aber das tut nichts. Ich habe versucht, eine gerade TextBox1.Width = 300;, aber das ändert nicht die Größe einmal maximiert.

Idealerweise möchte ich sagen: TextBox1.Width = Window.width/3; TextBox1.Margin = My_Margin; Dabei setzt My_Margin den linken Rand auf 1/3 Window.Width. Damit füllt die Textbox das mittlere Drittel des Fensters.

EDIT: Ich verstehe, dass die GRID-Methode der Weg von Anfang des Projekts war. Gibt es einen Workaround, den ich in diesem Stadium in C# machen kann, anstatt das Formular zu überarbeiten?

EDIT: Haben die beste Antwort akzeptiert, obwohl es nicht die eigentliche Frage beantwortet, wie es aussieht die einzige Option, die ich habe. Ich weiß, dass es eine Möglichkeit gibt, die Größe von Steuerelementen zu ändern, sobald das Formular maximiert ist. Ich habe keine Zeit, es zu finden, und es sind keine guten Vorschläge entstanden.

+0

"Ich habe Code zu sizechanged Ereignis hinzugefügt, das die Größe der Steuerelemente als Verhältnis der Formulargröße ändert". Das macht kein sinn. WPF bietet ein leistungsstarkes Layoutsystem. Fangen Sie an, hier zu lesen: https://docs.microsoft.com/en-us/dotnet/framework/wpf/advanced/layout. Verwenden Sie dann ein Raster als Containerelement. – Clemens

+0

Ich verstehe jetzt, dass das Gitter der beste Weg zu gehen war, aber ich hoffte, dass ich in der Lage sein würde, mit diesem Problem umzugehen, ohne zurückzugehen und das Formular neu zu bearbeiten, indem ich dies im Code behandle. Ist das möglich? – Ritchie

+0

Ich würde dringend empfehlen, jede Anstrengung in dieser Richtung zu stoppen und nur das richtige Layout zu verwenden. Das ist Zeitverschwendung. – Clemens

Antwort

3

Verwenden Sie ein Raster, definieren Sie Spalten (mit ihrer Breite) und Zeilen, und platzieren Sie das Textfeld mit den Eigenschaften Grid.Row und Grid.Column. Auch in einem WPF-Grid bedeutet * für Breite und Höhe eine proportionale Dimensionierung. So zum Beispiel wenn Sie 2 Spalten definiert wie diese hier

<Grid.ColumnDefinitions> 
    <ColumnDefinition Width="1*"></ColumnDefinition> 
    <ColumnDefinition Width="9*"></ColumnDefinition> 
</Grid.ColumnDefinitions> 

Sie wpf sagen, dass die erste Spalte das 10% der insgesamt zur Verfügung stehenden Breite einnehmen wird, während das zweite 90%.

+0

Ich dachte anfangs daran, aber weil die anderen Steuerelemente anders ausgelegt sind, dass diese Methode sehr schwierig war, alles auszulegen. Wie es aussieht, habe ich nicht wie Sie kommentieren und ich denke, in diesem Stadium wird es sehr schwierig sein, das Layout zu ändern. Gibt es keine Möglichkeit, nur die Steuerungsgröße im C# -Code zu ändern? – Ritchie

+0

Ich schlage vor, dass Sie ein wenig Zeit brauchen, um diese Praxis zu implementieren, und nicht für Ihre Steuerelemente hardcodieren (es sei denn, Sie möchten präzise Dimension).Auf diese Weise können Sie eine App erstellen, die ihr Aussehen in allen möglichen Monitoren und Größen hält. –

+0

Ich stimme zu und beabsichtige dies für jedes zukünftige Projekt zu tun. Gibt es zu diesem Zeitpunkt einen Workaround? – Ritchie

Verwandte Themen