有人对Silverlight 2中如何证明只读文本(呈现为TextBlock
)有任何建议吗? WPF通过TextAlignment
枚举:
public enum TextAlignment
{
Left,
Right,
Center,
Justify // <--- Missing from Silverlight :(
}
但是,Silverlight 2仅支持以下内容:
public enum TextAlignment
{
Center,
Left,
Right
}
感激地收到任何想法或建议。
答案 0 :(得分:1)
在我的头脑中,我可以想到两种不那么容易的方法来做到这一点。一个是相当蹩脚的;在单词之间添加空格。另一种方法是以某种方式解析文本,使每个单词都是它自己的文本块,然后你可以使用一个网格左对齐一行的第一个单词并右对齐一行的最后一个单词,然后将其他单元格空间放入中心单元使用堆叠面板或类似物。
确定哪些单词是行的开头和结尾将涉及测量每个块的渲染大小并确定它是否适合。这不简单,但应该有效。
答案 1 :(得分:0)
我发现了一篇关于此事的博文 - http://math-geek-rock-chick.blogspot.com/2008/08/silverlight-and-text-alignjustify.html。 我们的想法是将文本划分为单独的行,然后将ScaleTransform应用于每行将文本从左侧(RenderTransformOrigin = 0,0)缩放到右侧(Scale.X = 1.02)。 但是这种方法只适用于小块文本,如果TextBox大小正在改变,它可能会失效。
答案 2 :(得分:0)
显然,唯一的解决方案是将文本行拆分为列中的单词和布局单词(正如Jeff Yates在上面所建议的那样)。首先是使用Grid容器验证这个想法:
<Grid Name="grid1">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<TextBlock HorizontalAlignment="Left" Text="This" Grid.Column="0" />
<TextBlock HorizontalAlignment="Center" Text="is" Grid.Column="2" />
<TextBlock HorizontalAlignment="Center" Text="someprettylongpiece" Grid.Column="4" />
<TextBlock HorizontalAlignment="Right" Text="text" Grid.Column="6" />
</Grid>
下一步是创建自定义面板,执行文本块布局而不处理Grid:
<JustifiedPanel>
<TextBlock Text="This"/>
<TextBlock Text="is"/>
<TextBlock Text="a"/>
<TextBlock Text="justified"/>
<TextBlock Text="line"/>
<TextBlock Text="of"/>
<TextBlock Text="text"/>
<TextBlock Text="that"/>
<TextBlock Text="demonstrates"/>
<TextBlock Text="feasibility"/>
</JustifiedPanel>
(my blog上提供了示例源代码) 最后,我将创建JustifiedTextBlock控件,它将文本拆分为单词并对其进行布局。这里非常重要的事情是正确的RTL支持和正确的行分割。
答案 3 :(得分:0)
现在你可以使用<RichTextBox>
,它会很棒。
如果你愿意,这是来自Rudy Huyn的法语tuto:http://www.rudyhuyn.com/blog/2011/11/08/comment-justifier-du-texte-sous-windows-phone/
答案 4 :(得分:-2)
如果这些不符合您的需求,您应该编写一个扩展程序或转换器并绑定到它而不是使用其中一个枚举。