需要带有TextTrimming和MaxLines的WPF TextBlock或TextBox

戴夫

我需要一个具有TextTrimming和MaxLines的TextBlock或TextBox。TextBlock具有TextTrimming属性,而TextBox具有MaxLines属性,但两者均不支持。这是较大的控件的一部分,该控件允许用户输入注释并将其显示在ListBox中(请参阅:使用WPF的悲伤用户列表和TextBox的UserControl无法使文本包装工作如果有兴趣)。基本上,对于已经输入的注释,我想将注释限制为2行。如果长度超过2行,我会在其末尾显示一个椭圆(...),以指示该注释还有更多内容。如果用户将鼠标悬停在缩略的便笺上,他/她将看到整个便笺作为弹出窗口。*控件将放置在主网格上,并且大小可能不同(或调整了大小),因此2行中的文本量可能会发生变化。即,在某些情况下可以完全显示的注释可能在其他情况下最终被缩写。

尝试将MaxLines功能添加到TextBlock或将TextTrimming添加到TextBox会更好吗?我看到一些帖子似乎与我需要做的很接近。这是一个将TextTrimming添加到TextBox的方法,但是仅在编辑时才可以使用,并且不清楚MaxLines是否仍然有效:TextBox TextTrimming我没有遇到任何有关将MaxLines属性添加到TextBlock的事情。请注意,Windows Phone的TextBlock似乎拥有它。也许我不是唯一需要这个的人:)

令我有些惊讶的是,它“开箱即用”时不可用。这似乎是一个普遍的问题。顺便说一句,对于TextBox,TextBlock甚至是Label或其他东西,没有任何偏好。这些只是ListBox项,并且不可编辑。

任何想法或指针,将不胜感激。

-Dave *如果您正在考虑,“他可能接下来要问用户将鼠标悬停在缩写音符上时如何显示弹出窗口”,您是非常正确的!

这是一种基于此stackoverflow帖子的解决问题的方法:Scrollable TextBlock大小精确为2行高请参阅Joel B Fant的回答。关键思想是另一个不可见的TextBlock(以下称为“限制器”),具有2行(或您想要的任何内容)。然后,将文本块的Height属性绑定到虚拟“更高级”文本块的ActualHeight。这是我的XAML外观,它似乎可以正常工作:

<UserControl x:Class="MyControlsLibrary.Views.NotesControl"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">

<UserControl.Resources>
    <DataTemplate x:Key="DefaultTemplate">
        <Grid x:Name="GridItem" >
            <Grid.ColumnDefinitions>
                <ColumnDefinition   />   

            </Grid.ColumnDefinitions>
            <ScrollViewer Margin="0,5,5,0" MaxHeight="{Binding ElementName=limiter,Path=ActualHeight}" HorizontalAlignment="Stretch" VerticalAlignment="Top" VerticalScrollBarVisibility="Hidden">
                <TextBlock   x:Name="NoteText" Grid.Column="0"  Height="{Binding ElementName=limiter,Path=ActualHeight}"  Text="{Binding Path=NoteText}"   TextTrimming="WordEllipsis" TextWrapping="Wrap">
                    <TextBlock.ToolTip>
                        <TextBlock Text="{Binding Path=NoteText}" TextWrapping="Wrap"></TextBlock>
                    </TextBlock.ToolTip>
            </TextBlock>
            </ScrollViewer>
            <TextBlock x:Name="limiter" Grid.Column="0"  Margin="0,5,5,0" Visibility="Hidden" HorizontalAlignment="Left" Width="10"  VerticalAlignment="Top">
            a <LineBreak/> b
            </TextBlock>

        </Grid>
    </DataTemplate>
</UserControl.Resources>
<Grid Name="LayoutRoot">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <TextBox TextWrapping="Wrap" Grid.Row="0"  Text="{Binding Path=NewNoteText, UpdateSourceTrigger=PropertyChanged}"   LostFocus="TextBox_LostFocus" AcceptsReturn="True">
        <TextBox.InputBindings>
            <KeyBinding Command="{Binding Path=AddNote}" Key="Enter"/>
        </TextBox.InputBindings>
    </TextBox>

    <ListBox     
        ScrollViewer.HorizontalScrollBarVisibility="Disabled"  Grid.Row="1"  ItemsSource="{Binding Path=Notes}"  Margin="5" ItemTemplate="{DynamicResource DefaultTemplate}"   SelectionChanged="NotesControl_SelectionChanged">
        </ListBox>


</Grid>

谢里登

您可以从默认值获得该功能TextBlock除了使用该MaxLines属性外,您还可以使用普通的旧Height属性。这是一个非常简单的示例:

<TextBlock Text="This is some very important note which just happens to be quite long" 
    Height="38" Width="150" TextWrapping="Wrap" TextTrimming="CharacterEllipsis" />

在此处输入图片说明

请记住,我仅在Width此处设置以向您显示带有省略号的两行文本在您的项目中,应Grid设置一个Width

当然,您不能将其用于文本输入,因此,如果您有兴趣,可以Code Project上的“TextBox 省略号的WPF文本框”页面下载省略号的a

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

具有与TextBlock相同的剪辑的TextBox(TextBox模板)

来自分类Dev

需要带有Node和jQuery的JS

来自分类Dev

WPF,带有RotateTransform和LinearGradientBrush的TextBlock

来自分类Dev

我需要带有ReaderWriterLockSlim的MemoryBarrier吗?

来自分类Dev

在React JS中需要带有变量的文件

来自分类Dev

需要带有计数器的按键按钮

来自分类Dev

需要带有计数器的按键按钮

来自分类Dev

我需要带有C11的GCC的-pedantic标志吗?

来自分类Dev

需要带有纯抽象类类型参数的子句吗?

来自分类常见问题

我需要带有异步Web框架的celery吗?

来自分类Dev

使用jQuery> = 2的Browserify产生“ jQuery需要带有文档的窗口”

来自分类Dev

调用需要带有结构的独立参数的C ++函数是否安全?

来自分类Dev

PHP作曲家需要带有存储库详细信息的命令

来自分类Dev

我如何需要带有lein exec的clojure.java.io?

来自分类Dev

调用va_start是否需要带有可变参数的函数?

来自分类Dev

未捕获的错误:Bootstrap的JavaScript需要带有requirejs的jQuery

来自分类Dev

Libre Office表单-需要带有查找字段的数据表布局

来自分类Dev

Bootstrap 下拉菜单需要带有 Angular 2 项目的 Popper.js

来自分类Dev

角度指令需要带有两位小数的正则表达式

来自分类Dev

仍然需要带有使用JavaScript ES6模块和类的应用程序的模块加载器吗?

来自分类Dev

仍然需要带有使用JavaScript ES6模块和类的应用程序的模块加载器吗?

来自分类Dev

SQL需要带子串和charindex的建议

来自分类Dev

使用双击生成的 TextBox 更改生成的 TextBlock

来自分类Dev

需要带有非压缩TIFF格式的exif缩略图的JPEG测试图像

来自分类Dev

ExtJS 5:当需要带有JSON正文的POST时,如何设置商店以收集远程数据?

来自分类Dev

由于某些原因,使用std :: make_pair需要带有boost :: flat_map的显式类型

来自分类Dev

带有DockPanel的透明TextBlock

来自分类Dev

WPF TextBlock高度

来自分类Dev

WPF Textblock TargetNullValue not working?

Related 相关文章

  1. 1

    具有与TextBlock相同的剪辑的TextBox(TextBox模板)

  2. 2

    需要带有Node和jQuery的JS

  3. 3

    WPF,带有RotateTransform和LinearGradientBrush的TextBlock

  4. 4

    我需要带有ReaderWriterLockSlim的MemoryBarrier吗?

  5. 5

    在React JS中需要带有变量的文件

  6. 6

    需要带有计数器的按键按钮

  7. 7

    需要带有计数器的按键按钮

  8. 8

    我需要带有C11的GCC的-pedantic标志吗?

  9. 9

    需要带有纯抽象类类型参数的子句吗?

  10. 10

    我需要带有异步Web框架的celery吗?

  11. 11

    使用jQuery> = 2的Browserify产生“ jQuery需要带有文档的窗口”

  12. 12

    调用需要带有结构的独立参数的C ++函数是否安全?

  13. 13

    PHP作曲家需要带有存储库详细信息的命令

  14. 14

    我如何需要带有lein exec的clojure.java.io?

  15. 15

    调用va_start是否需要带有可变参数的函数?

  16. 16

    未捕获的错误:Bootstrap的JavaScript需要带有requirejs的jQuery

  17. 17

    Libre Office表单-需要带有查找字段的数据表布局

  18. 18

    Bootstrap 下拉菜单需要带有 Angular 2 项目的 Popper.js

  19. 19

    角度指令需要带有两位小数的正则表达式

  20. 20

    仍然需要带有使用JavaScript ES6模块和类的应用程序的模块加载器吗?

  21. 21

    仍然需要带有使用JavaScript ES6模块和类的应用程序的模块加载器吗?

  22. 22

    SQL需要带子串和charindex的建议

  23. 23

    使用双击生成的 TextBox 更改生成的 TextBlock

  24. 24

    需要带有非压缩TIFF格式的exif缩略图的JPEG测试图像

  25. 25

    ExtJS 5:当需要带有JSON正文的POST时,如何设置商店以收集远程数据?

  26. 26

    由于某些原因,使用std :: make_pair需要带有boost :: flat_map的显式类型

  27. 27

    带有DockPanel的透明TextBlock

  28. 28

    WPF TextBlock高度

  29. 29

    WPF Textblock TargetNullValue not working?

热门标签

归档