2010-12-06 14 views
12

我需要一個很好的解決方案,使網格中的文本框擴展到其可用空間,但不會根據文本在其中發生多長時間來擴展。WPF:按可用寬度展開TextBox,但不按其內容展開?

我發現的大多數解決方案都是製作一個虛擬邊框並綁定到它的ActualWidth,但它對我來說是一個哈希解決方案。邊界解決方案需要在邊界上設置一個小邊距,這根本不好。將其設置爲低會導致UI行爲非常奇怪。不喜歡這個解決方案。必須有更好的?我只希望文本框不要隨其內容擴展。它不應該那麼辛苦。請讓我知道如何做到這一點。

編輯:

我注意到一個奇怪的是,下面的代碼,使邊界很多大那麼它必須是:

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

更換邊框和文本框爲了使邊界適合文本框很好,但我需要的是相反的。如前所述,設置一個邊距至少0.5的邊界使得它可以工作,但結果會帶來一些不穩定的UI。

+1

如果你只是在網格中有一個文本框,它應該默認伸展到它的父節點。你確定你沒有任何修改你的Horizo​​ntalAlignment屬性的東西嗎?你在談論Grid控件還是其他一些控件(如DataGrid或GridView),你稱之爲Grid? – 2010-12-06 10:24:44

回答

2

Horizo​​ntalAlignment =拉伸沒有幫助? AFAIK網格面板在其水平對齊設置爲「拉伸」時將其子元素拉伸到其單元格中的可用空間。

+0

是的,但我的網格沒有明確的大小,它的單元格應該擴展到它的內容。問題是,文本框控件擴展到它的內容以及...對於我的場景,它確定如果一個組合框擴展到它的內容,但不是爲文本框做同樣的事情。它擴展了網格和我的窗口,因爲我使用SizeToContent = WidthAndHeight。 – 2010-12-06 10:31:41

1

您是否瞭解如何解決此問題?

回答你的邊界問題:你應該把你的TextBox對象放在邊界內。

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

我用DockPanel擴展到它的可用空間。你也必須設置邊距:

<DockPanel> 
    <TextBox Width="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=DockPanel}, Path=ActualWidth}" Margin="1" /> 
</DockPanel>