2009-02-02 7 views
9

So komme ich bei WPF aus einer HTML-Perspektive.In XAML, wie man sagt: Standardbreite und -höhe für z.B. TextBox

Ich möchte nur ein TextBox auf meinem Fenster so setzen:

<Grid> 
    <TextBox Name="theName" /> 
</Grid> 

Es stellte sich heraus, dass die TextBox dann riesig ist, deckt das gesamte Fenster.

Ok, das ist nicht das, was ich will, aber ich will nicht die genaue Größe definieren, entweder weil ich weiß, Height und Width sollten flexibel sein, so dass ich versuchen (!):

<TextBox Name="theName" Width="Auto" Height="Auto"/> 

Die gleiche Sache . Also ich versuche:

<TextBox Name="theName" 
    HorizontalAlignment="Stretch" 
    VerticalAlignment="Stretch"/> 

Gleiche. Also habe ich einfach die Größen hart codiert:

<TextBox Name="theName" Width="100" Height="20"/> 

Welche ich weiß, ist keine gute Programmierung in WPF.

Also, was sagen Sie TextBox zu "Standardgrößen für die Schriftgröße angezeigt werden verwendet"?

Antwort

9

Sie können Bryan Beispiel noch ein bisschen weiter nehmen. Indem Sie eine bestimmte Ausrichtung angeben, die nicht gestreckt ist, und die TextBox weiter einschränken, sodass sie nicht größer als eine bestimmte Größe wird. zB:

<Grid x:Name="LayoutRoot"> 
     <TextBox HorizontalAlignment="Left" VerticalAlignment="Top" Text="TextBox" TextWrapping="Wrap" 
     MinWidth="15" MinHeight="20" MaxWidth="500" MaxHeight="50"/> 
</Grid> 

Sie können es noch weiter durch die Einrichtung von Zeilen/Spalten innerhalb des Grid und sie auf verschiedene Weise einschränken. Wenn Sie von einem HTML-Hintergrund kommen, denken Sie daran, dass Sie eine Tabelle verwenden, um das Layout zu steuern. Denken Sie daran, dass Sie auch andere Containerobjekte verschachteln können (z. B. StackPanels, WrapPanels, andere Raster usw.).

Die Herausforderung mit XAML und den WPF/Silverlight-Steuerelementen besteht darin, dass sie sehr flexibel sind. Sie müssen also alle Optionen und deren Auswirkungen auf das Layout im Griff haben.

Viel Glück. Ich gehe jetzt genau dasselbe durch.

6

Verwenden Sie einen anderen Behälter. Das Gitter streckt immer seine untergeordneten Steuerelemente, um die Gitterzelle zu füllen.

Sie könnten z.B. ein Stackpanel, das seine Steuerung nur in eine Richtung streckt.

+0

Nur ein Punkt der Warnung. Während ein StackPanel die untergeordneten Steuerelemente nur in eine Richtung dehnt, sofern Sie dieses untergeordnete Objekt nicht explizit beschränken, stellt das StackPanel diesen untergeordneten Objekten einen Infinitespace in dieser Richtung zur Verfügung. Kann bei einigen Kontrollen zu ungewöhnlichen Nebenwirkungen führen. –

3

Zusätzlich zur Verwendung eines anderen Panels, wie von Stefan erwähnt, könnten Sie der TextBox nur eine Ausrichtung zuweisen, die nicht Stretch ist. z.B.

<TextBox Name="theName" HorizontalAlignment="Left" VerticalAlignment="Top"/> 
2

Die Größen in WPF sind keine Pixel, sie sind "geräteunabhängige Pixel", die 1/96 Zoll groß sind - also werden sie im heutigen normalen DPI-Setup 1: 1 auf Pixel abgebildet.

Wenn Sie jedoch das Programm im Hoch-DPI-Modus ausführen, wächst die TextBox mit der DPI (und der Schriftart).

Das Festlegen einer fest codierten Größe ist also nicht so schlimm.

Darüber hinaus können Sie nur HorizontalAlignment und VerticalAlignment verwenden, die nicht "Stretch" sind, dies wird die TextBox auf Inhalt - aber dann eine leere TextBox wird winzig sein.

Sie können VerticalAlignment auf "Center", "Top" oder "Bottom" setzen, um automatisch eine Höhe von etwa einer Zeile zu erhalten (möglicherweise durch eine MinHeight - Einstellung, um Probleme wirklich winzige Schriftarten zu vermeiden) und dann die Breite so einstellen Die TextBox-Breite ändert sich nicht, wenn der Benutzer darin eingibt.