Das scheint einfach zu sein, aber ich bin ratlos. In WPF möchte ich eine TextBox, die sich auf die Breite des übergeordneten Elements erstreckt, jedoch nur auf eine maximale Breite. Das Problem ist, dass ich möchte, dass es innerhalb seines Elternteils gerechtfertigt bleibt. Um es zu dehnen, müssen Sie HorizontalAlignment = "Stretch" verwenden, aber dann wird das Ergebnis zentriert. Ich habe mit HorizontalContentAlignment experimentiert, aber es scheint nichts zu bewirken.
Wie kann ich erreichen, dass dieses blaue Textfeld mit der Größe des Fensters wächst, eine maximale Breite von 200 Pixel hat und gerechtfertigt bleibt?
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel>
<TextBox Background="Azure" Text="Hello" HorizontalAlignment="Stretch" MaxWidth="200" />
</StackPanel>
</Page>
Was ist der Trick?
HorizontalAlignment="Stretch"
auf dasContainer
Element setzen. (ps, mir ist klar, dass Sie diese Frage vor über 6 Jahren gestellt haben.)quelle
Beide Antworten funktionierten für das von mir angegebene Problem - Danke!
In meiner realen Anwendung habe ich jedoch versucht, ein Panel in einem ScrollViewer einzuschränken, und Kents Methode hat das aus irgendeinem Grund nicht sehr gut gehandhabt. Ich habe mich nicht darum gekümmert, es aufzuspüren. Grundsätzlich könnten die Steuerelemente über die MaxWidth-Einstellung hinaus erweitert werden und meine Absicht zunichte machen.
Nirs Technik funktionierte gut und hatte kein Problem mit dem ScrollViewer, obwohl es eine Kleinigkeit gibt, auf die man achten muss. Sie möchten sicherstellen, dass der rechte und der linke Rand der TextBox auf 0 gesetzt sind, da sie sonst im Weg stehen. Ich habe auch die Bindung geändert, um ViewportWidth anstelle von ActualWidth zu verwenden, um Probleme zu vermeiden, wenn die vertikale Bildlaufleiste angezeigt wird.
quelle
Sie können dies für die Breite Ihrer DataTemplate verwenden:
Stellen Sie sicher, dass Ihr DataTemplate-Stamm Margin = "0" hat (Sie können ein Bedienfeld als Stamm verwenden und den Rand auf die untergeordneten Elemente dieses Stamms setzen).
quelle
Funktionell ähnlich der akzeptierten Antwort, erfordert jedoch nicht die Angabe des übergeordneten Elements:
quelle
Vielleicht kann ich noch jemandem helfen, der auf diese Frage stößt, weil dies ein sehr altes Problem ist.
Ich brauchte das auch und schrieb ein Verhalten, um mich darum zu kümmern. Also hier ist das Verhalten:
Dann können Sie es so verwenden:
Und schließlich zu vergessen, den
System.Windows.Interactivity
Namespace zu verwenden, um das Verhalten zu verwenden.quelle
ich würde ... benutzen
SharedSizeGroup
quelle
In meinem Fall musste ich ein Textfeld in ein Stapelfenster einfügen, um das Textfeld auf der linken Seite zu dehnen. Danke an vorherigen Beitrag. Nur als Beispiel habe ich eine Hintergrundfarbe festgelegt, um zu sehen, was passiert, wenn sich die Fenstergröße ändert.
quelle