【问题标题】:WPF TextBox WrappingWPF 文本框包装
【发布时间】: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 一部分的选项卡的宽度),我相信这会起作用。

有什么想法吗?

【问题讨论】:

标签: wpf textbox word-wrap


【解决方案1】:

虽然视图有滚动条

禁用水平滚动视图,所以它会被强制换行。您可以尝试在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>

【讨论】:

  • 那没用,但是这个 SO 链接让我成功了 99%:stackoverflow.com/questions/386039/…。我唯一不知道的是,如果他们将窗口大小调整回较小的分辨率,则框会保留原始宽度,但我不确定这对我是否重要,我倾向于不这样做。跨度>
  • @digitall:我刚刚在这里运行了代码,它运行良好(只是网格)。也许其他包装控件搞砸了。
  • 在一个有 8 列的网格中(其中一列设置为自动),一个带有 columnspan="8" 的文本框,换行不起作用,文本框自动增加它的大小;(
  • 如果有人想知道,当滚动条由 ListBox 而不是 DataGrid 创建时,此修复程序也有效。或者至少它对我有用。
猜你喜欢
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 2012-11-23
  • 2010-10-27
  • 1970-01-01
  • 2010-11-25
相关资源
最近更新 更多