Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 带省略号和冒号的文本修剪_Wpf_Texttrimming - Fatal编程技术网

Wpf 带省略号和冒号的文本修剪

Wpf 带省略号和冒号的文本修剪,wpf,texttrimming,Wpf,Texttrimming,这是一个相对简单的问题: 我可以使用以下方法修剪带有省略号的文本: <TextBlock Text="{Binding}" TextTrimming="CharacterEllipsis"/> 这将给我一些大致如下的信息: “这句话太长了” => “这句话我……” 这一切都很棒,但我真正想要的是: “这句话…”/“这句话…” 我要找的是省略号后面的冒号。有没有一个简单的方法来实现这一点 编辑: 很抱歉给你带来了困惑 我想将默认省略号字符串从“…”更改为“…:”。同样,我将在文本

这是一个相对简单的问题:

我可以使用以下方法修剪带有省略号的文本:

<TextBlock Text="{Binding}" TextTrimming="CharacterEllipsis"/>

这将给我一些大致如下的信息:

“这句话太长了”

=>

“这句话我……”

这一切都很棒,但我真正想要的是:

“这句话…”/“这句话…”

我要找的是省略号后面的冒号。有没有一个简单的方法来实现这一点

编辑:

很抱歉给你带来了困惑

我想将默认省略号字符串从“…”更改为“…:”。同样,我将在文本字符串本身中包含一个冒号。这样,我将始终显示冒号。同样,在任何情况下,一切都应该在同一条线上

以下是一些可以接受的结果:

简而言之:


太长了。:

使用两个文本块,第一个是省略号示例,第二个是冒号

更新:

看起来这是一个相对简单的问题,有很多复杂之处

人们可能会尝试使用一些文本块,第一个文本块显示目标文本,另两个文本块显示“:”和“…”,并根据第一个文本块是否有足够的空间显示其所有文本,使用可见性值转换器在它们之间切换。这是有可能的,但可能会导致布局不稳定

刚刚实现了一个定制面板,我可以想象一个可能的解决方案,包括一个设计用来容纳三个孩子的面板,即上面描述的三个文本块

从面板继承的自定义面板应覆盖两个关键方法:测量和排列

在测量方法中,所有的孩子都应该被测量

在排列方法中,检查是否有足够的空间显示前两个孩子,如果有,将他们并排放置。如果没有足够的房间显示,则第一个子房间的大小将允许第三个子房间显示,并将第三个子房间设置为右对齐

更新:

我尝试了自定义面板,它工作除了第一个文本框是剪辑部分字符


干净格式的最终解决方案是调整显示字符串,直到其符合分配的空间并应用适当的后缀。

这是可行的,但我需要添加一些填充,以便冒号始终保持可见:

<TextBlock Padding="0,0,5,0" >
    <TextBlock TextTrimming="CharacterEllipsis">Lorem ipsum dolor sit amet, consectetur adipisicing </TextBlock>
    <TextBlock>:</TextBlock>
</TextBlock>

Lorem ipsum dolor sit amet,Concertetur Adipising
:

如果字符串中没有冒号,可以使用
Binding.StringFormat

<TextBlock Text="{Binding, StringFormat={}{0}:}" TextTrimming="CharacterEllipsis"/>


(我意识到这是一个非常古老的问题,但我碰巧无意中发现了它,所以我想我会把这个给其他任何关注它的人。)

你很困惑。哈哈,是的。我复制了错误的xaml-uzy-check-out“”行。从那以后,应该可以完成它。我不完全确定这是我想要的效果。我正在有效地尝试将默认椭圆字符串从“…”更改为“…:”。并始终显示冒号,即使没有省略号?克莱门斯-很抱歉造成混淆,但我确实希望冒号始终显示道格-这通常是我想要的效果。我试过了,在一定的宽度下,冒号下降到下一行。这还不够好。这两个文本块位于listboxitem内dockpanel内的水平包装内。wrappanel左侧还有一个图像控件。@FZdev那么,您为什么不简单地将两个文本块放在一个水平DockPanel中,首先是冒号文本块,第二个是修剪过的文本块,并且在这两个面板上都有适当的
DockPanel.Dock
。因此,默认情况下,修剪后的文本块将填充冒号未使用的所有空间。或者更好的方法是使用网格。啊,网格和dock的问题是,当字符串不是很长(并且屏幕很宽)时,冒号和字符串会分开。使用自动列表示冒号和文本意味着文本根本不会换行。似乎应该有一种方法来限制大小,但我现在想不起来。呃,这很有效,只是在某些点上,冒号文本块似乎被文本块隐藏了。不管怎样,这是最简单的工作环境。是的,我认为添加填充物可以解决这个问题。我希望你能让它工作,也许在第二个文本块上填充。包装器的填充肯定会有帮助(实际上我在所有其他容器中都有这样的填充)。在冒号TB的左侧添加填充实际上使它比您的实现更糟糕。可能通过修改值以及填充应用于哪一侧可以修复所有问题;不过现在不值得这么做,因为您的示例对于演示来说已经足够好了。。文本由通常使用的较低级别的类型组成,但这允许您突出显示字符串中的子字符串。请参见第页的“绑定范围的内容”