2011-10-19 68 views
10

我想弄清楚如何讓文本框來包裝它的內容,但是情況與典型的「它不包裹」場景並不完全相同。我的文本框被包含其中一個Telerik的RadTabControl實例內部使用(使用ContentTemplatePresenter以確定哪些視圖顯示),一個DataTemplate內部和XAML的DataTemplate中看起來是這樣的:WPF文本框包裝

<DataTemplate x:Key="NotesTemplate"> 
    <Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <TextBlock Text="Use the box below to record any general notes associated with this item." Style="{StaticResource Default}" /> 
     <TextBox TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" GridRow="1" Margin="20" Text="{Binding Notes, UpdateSourceTrigger=PropertyChanged}" /> 
    </Grid> 
</DataTemplate> 

我之所以這麼說,它不」不屬於正常情況下「它不包裝」的情況是它用於包裝,直到我不得不將視圖更改爲可調整大小以支持應用程序將運行的各種屏幕尺寸。當我這樣做時,TextBox停止包裝,因爲(大概)作爲用戶鍵入的東西的TextBox說:「我需要更多的空間」,所以父責任和框繼續向右無限期(儘管視圖獲取滾動條)。我嘗試使用Binding/RelativeSource設置MaxWidth,但由於父級是專門設計用於擴展該方法不起作用。我需要發生的是該框應該是其「包含父母」的寬度VisibleWidth。意思是,如果窗口本身是1024x768,那麼文本框的最大寬度應該是1024,此後的任何文本都會自動換行,但是如果窗口增長到1280x1024,那麼該框現在應該是1280,文本將相應地包裝。我想這種情況與此結合的表達,但沒有運氣:

MaxWidth="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=ActualWidth}" 

窗口大小本身並沒有增長,所以如果我能得到的窗口的寬度(減去一定金額,爲此支付的選項卡的寬度TabControl的一部分)我相信這會工作。

任何想法?

+0

結束通過另一個SO問題找到最佳結果:http://stackoverflow.com/questions/386039/wpf-textbox-and-scroll-behavior。 – RubyHaus

回答

13

雖然視圖獲取滾動條

禁用水平滾動視圖,因此將被迫換行。您可以嘗試在TextBox本身或包裝Grid上禁用它。

<DataTemplate x:Key="NotesTemplate"> 
    <Grid ScrollViewer.HorizontalScrollBarVisibility="Disabled"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto" /> 
      <RowDefinition Height="*" /> 
     </Grid.RowDefinitions> 
     <TextBlock Text="Use the box below to record any general notes associated with this item." Style="{StaticResource Default}" /> 
     <TextBox TextWrapping="Wrap" AcceptsReturn="True" VerticalScrollBarVisibility="Auto" Grid.Row="1" Margin="20" Text="{Binding Notes, UpdateSourceTrigger=PropertyChanged}" /> 
    </Grid> 
</DataTemplate> 
+0

這並沒有工作,但這個鏈接讓我有99%的方式:http://stackoverflow.com/questions/386039/wpf-textbox-and-scroll-behavior。我不知道的唯一情況是,如果他們將窗口大小調整爲較小的分辨率,那麼該框會保留原始寬度,但我不確定這對我而言是否重要,我傾向於不這樣做。 – RubyHaus

+0

@digitall:我剛剛在這裏運行代碼,它工作正常(只是網格)。也許其他包裝控制搞砸了。 – MichaelS

+0

在具有8列(其中一列設置爲自動)的網格中,列寬=「8」的文本框,換行不起作用,文本框自動增大;( – lunair