2010-12-06 3 views
12

Ich brauche eine gute Lösung für eine TextBox in einem Raster zu erweitern, um ihren verfügbaren Platz zu erweitern, aber nicht erweitern, je nachdem, wie lange der Text darin zu sein.WPF: Erweitern Sie TextBox nach verfügbarer Breite, aber NICHT nach Inhalt?

Die meisten Lösungen, die ich gefunden habe, ist es, einen Dummy-Rahmen zu erstellen und an seine ActualWidth zu binden, aber es ist eine zu Hacky-Lösung für mich. Die Border-Lösung benötigt auch einen kleinen Rand an der Grenze, was überhaupt nicht nett ist. Wird sie auf "low" gesetzt, verhält sich die Benutzeroberfläche sehr seltsam. Ich mag diese Lösung nicht. Es muss einen besseren geben? Ich möchte nur, dass die Textbox nicht mit ihrem Inhalt erweitert wird. Es sollte nicht so schwer sein. Bitte lassen Sie mich wissen, wie das geht.

EDIT:

Eine seltsame Sache, die ich bemerkt, dass der folgende Code der Grenze viel größer macht dann muss es sein:

<Grid> 
    <Border Name="dummy1" Background="Red" /> 
    <TextBox Text="23242342343555554234234444444444423423423432344444444" Width="{Binding ActualWidth, ElementName=dummy1}" /> 
</Grid> 

Ersetzen der Grenze und Textbox, um die Grenze macht passen Sie gut in die Textbox, aber was ich brauche, ist das Gegenteil. Wie schon gesagt, wenn Sie einen Rand (auf dem Rand) auf mindestens 0,5 setzen, funktioniert es, aber mit einer etwas zwielichtigen Benutzeroberfläche.

+1

Wenn Sie nur eine TextBox in einem Raster haben, sollte es standardmäßig auf seine Eltern strecken. Sind Sie sicher, dass Sie nichts haben, was Ihre HorizontalAlignment-Eigenschaft ändert? Sprechen Sie über das Grid-Steuerelement oder ein anderes Steuerelement (wie DataGrid oder GridView), das Sie Grid nennen? –

Antwort

2

HorizontalAlignment = Stretch hilft nicht? AFAIK-Gitterfelder dehnen ihre untergeordneten Elemente auf den verfügbaren Platz in ihrer Zelle, wenn ihre horizontale Ausrichtung auf Dehnung eingestellt ist.

+0

Ja, aber mein Gitter hat keine explizite Größe, seine Zellen sollten sich auf seinen Inhalt erweitern. Das Problem ist, dass das Textfeld-Steuerelement auch auf seinen Inhalt erweitert wird ... Für mein Szenario ist es ok, wenn eine Combobox zu ihrem Inhalt expandiert, aber nicht für eine Textbox, um dasselbe zu tun. Es erweitert das Gitter und mein Fenster auch, weil ich SizeToContent = WidthAndHeight verwende. –

+0

Sie möchten also, dass Ihr Textfeld eine feste Breite hat? Ist es zur Kompilierzeit bekannt? – Alex

+0

Nun, nein. Es sollte den gesamten Platz in der Zelle ausfüllen, aber niemals mit seinem Textinhalt expandieren. –

1

Haben Sie herausgefunden, wie Sie dieses Problem lösen können?

Antwort auf Ihr Border-Problem: Sie sollten Ihr TextBox-Objekt innerhalb des Rahmens platzieren.

<Border Background="Red" Padding="3"> 
     <Button Content="Button" /> 
    </Border> 
2

Ich habe DockPanel verwendet, um den verfügbaren Speicherplatz zu erweitern. Sie müssen auch Rand festlegen: