2009-02-02 33 views
9

所以我從HTML的角度來看WPF。在XAML中如何說:默認的寬度和高度,例如TextBox

我只想把一個TextBox我的窗口是這樣的:

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

原來,TextBox是那麼巨大,覆蓋了整個窗口。

好吧,那不是我想要的,但我不想定義確切大小要麼因爲我知道HeightWidth應該是靈活的,所以我嘗試(!):

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

同樣的事情。所以我嘗試:

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

同樣的事情。所以我只是硬編碼大小:

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

我知道是不是在一個WPF良好的編程習慣。

那麼,你如何告訴TextBox「顯示正在使用的字體大小的默認大小」?

回答

9

你可以把布萊恩的例子做得更深一點。通過指定不拉伸的特定對齊並進一步限制TextBox,以便它不會擴展超過特定大小。例如:

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

您可以通過在網格中設置行/列並將其限制在各種方式中來進一步實現。當你來自HTML背景時,可以考慮使用表來控制佈局。請記住,您也可以嵌套其他容器對象(即StackPanels,WrapPanels,其他網格等)。

XAML和WPF/Silverlight控件的挑戰在於它們非常靈活,所以您必須掌握所有選項以及它們如何影響佈局。

好運。我現在正在經歷這個完全相同的事情。

6

使用不同的容器。 網格始終拉伸其子控件以填充網格單元格。

您可以使用例如只在一個方向上延伸其控制的堆疊面板。

+0

只是一個警告點。雖然StackPanel只向一個方向延伸子控件,除非您明確約束該子對象,那麼StackPanel將爲那些子對象提供該方向上的無限空間。某些控制可能導致不尋常的副作用。 – 2009-02-02 14:54:33

3

除了使用與Stefan提到的不同面板之外,您可以僅給TextBox一個不是Stretch的對齊方式。例如

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

WPF中的尺寸不是像素,它們是1/96英寸的「設備無關像素」 - 因此在今天正常的DPI設置中,它們將1:1映射到像素。

但是,如果以高DPI模式運行程序,TextBox將隨DPI(和字體)一起增長。

因此設置一個硬編碼的大小並不是那麼糟糕。

除此之外,您只能使用不是「拉伸」的Horizo​​ntalAlignment和VerticalAlignment,這會將文本框的大小設置爲內容 - 但隨後空白的文本框將變得很小。

您可以將VerticalAlignment設置爲「中心」,「頂部」或「底部」以獲得大約一行的自動高度(可能通過MinHeight設置進行備份以避免真正的小字體出現問題),然後設置寬度TextBox寬度不會隨着用戶輸入內容而改變。

相關問題