【发布时间】:2011-12-11 08:05:32
【问题描述】:
我试图弄清楚如何让文本框包装其内容,但情况与典型的“它不包装”场景并不完全相同。我的文本框包含在 Telerik RadTabControl 实例中使用的 DataTemplate 中(使用 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>
我说它不属于正常的“它不换行”场景的原因是它过去常常换行,直到我不得不将视图更改为可调整大小以支持应用程序的不同屏幕尺寸运行。当我这样做时,TextBox 停止了换行,因为(可能)当用户键入一些内容时,TextBox 说“我需要更多空间”,因此父级有义务并且该框无限期地向右延伸(尽管视图有滚动条)。我尝试使用 Binding/RelativeSource 设置 MaxWidth,但由于父级是专门为增长而设计的,因此该方法行不通。我需要做的是盒子的宽度应该是它包含父母的VisibleWidth的宽度。意思是,如果 Window 本身是 1024x768,则 TextBox 的 MaxWidth 应该是 1024 并且此后的任何文本都会自动换行,但是如果 Window 增长到 1280x1024,则该框现在应该是 1280,并且文本会相应地换行。我用这个绑定表达式尝试了这个场景,但没有运气:
MaxWidth="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}, Path=ActualWidth}"
窗口大小本身并没有增长,所以如果我能得到窗口的宽度(减去一定量以覆盖作为 TabControl 一部分的选项卡的宽度),我相信这会起作用。
有什么想法吗?
【问题讨论】:
-
最终通过另一个 SO 问题找到了最佳结果:stackoverflow.com/questions/386039/…。