2011-10-19 47 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