我正在尝试弄清楚如何让文本框自动换行,但情况并不完全像典型的“无法换行”场景。我的文本框包含在一个DataTemplate中,该DataTemplate用于Telerik RadTabControl实例内部(使用ContentTemplatePresenter确定要显示的视图),DataTemplate的XAML代码如下:
<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>
我的意思是,它不属于普通的“不换行”情况,因为在我将视图更改为可调整大小以支持应用程序将运行的各种屏幕尺寸之前,它可以换行。当我这样做时,文本框停止了换行,因为(可能是)当用户输入一些内容时,文本框会说“我需要更多的空间”,所以父级会满足并且盒子无限制地继续向右延伸(虽然视图获取滚动条)。我尝试使用Binding / RelativeSource设置MaxWidth,但由于父级是特定设计的来增长,所以这种方法行不通。我需要发生的是该框的宽度应为其包含父项的VisibleWidth。也就是说,如果窗口本身是1024x768,则文本框的MaxWidth应为1024,此后的任何文本都将自动换行,但如果窗口增长到1280x1024,则框现在应为1280,文本将相应地换行。我尝试了这种绑定表达式的方案,但没有成功:
MaxWidth="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=ActualWidth}"
窗口大小本身并不会增长,因此如果我可以获得窗口的宽度(减去某个特定量以覆盖TabControl中的选项卡宽度),我认为那将起作用。
有什么想法吗?