2009-05-19 52 views
9

我需要一些幫助。不知道這是否可能。我想要有以下內容:wpf textbox textwrapping

<Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"/> 
      <ColumnDefinition Width="*"/> 
     </Grid.ColumnDefinitions> 
     <TextBox TextWrapping="Wrap" MinLines ="5"/> 
    </Grid> 

這是一個文本框包裝在寬度爲*的網格列內。我希望文本框能夠獲得所有可用的寬度(因此*),但是當用戶添加文本時,我希望它在到達行末(可用空間)時進行換行。

目前上面將給出一個文本框的整個寬度,但是當輸入文本時,文本框的寬度只是隨文本增長。

我知道我可以設置MaxWidth =?,但列的*點是我不知道列的大小是什麼。

我想對文本框說「不要增長,不管wpf是否讓你接受它,並且不要增加多一個像素」。

我想我想要的是不可能的,因爲wpf會詢問控件有多大,當用戶添加更多超出邊界的文本時,它會請求更多的空間並將其寬度擴展到無窮大。

回答

9

試着將TextBoxMaxWidth屬性綁定到您的加星列的ActualWidth屬性(您必須命名您的列來執行此操作)。我很確定我過去做過這樣的事情。

喜歡的東西:

MaxWidth={Binding ElementName=MyColumn, Path=ActualWidth} 

祝你好運!

+0

這看起來不錯,但它不起作用,因爲ColumnDefinition的ActualWidth屬性不是DependencyProperty並且MaxWidth將始終爲0.現在測試... – Vale 2012-09-13 10:41:34

0

當我在文本框上設置Grid.Column="1"時似乎能正常工作。

+0

+1良好的調用,我沒有注意到TextBox沒有被告知要顯示在第二列(正如他打算的那樣)。 :) – Pwninstein 2009-05-19 18:45:30

+0

我假設他想要列0中。 – Crispy 2009-05-19 18:56:20

0

除了什麼RandomEngy說,大約Grid.Column="1",你可能還需要對自身Grid設置一些調整屬性,特別是當它被設置另一容器內用不同的子Stretch行爲(例如StackPanel)。