2009-02-11 26 views
4

有没有人有任何建议如何理由在Silverlight 2中的只读文本(呈现为TextBlock)? WPF由TextAlignment枚举的方式支持文本对齐:您如何证明Silverlight中的文本?

public enum TextAlignment 
{ 
    Left, 
    Right, 
    Center, 
    Justify // <--- Missing from Silverlight :(
} 

然而,Silverlight 2中只支持以下功能:感激地接受

public enum TextAlignment 
{ 
    Center, 
    Left, 
    Right 
} 

任何意见或建议。

+0

+1问得好。我自己一直在做一些Silverlight,但我没有做过任何主要的WPF,所以我没有意识到这些“缺失”的项目(我目前是WinForms的人)。 – 2009-02-11 17:33:35

+0

从2.0版开始,Silverlight中的文本格式会被削弱。您甚至无法编写自己的文本布局代码,因为测量文本的唯一方法是创建一个TextBlock并对其进行度量,但这不会为您提供所需的所有度量标准。希望Silverlight 3 ... – U62 2009-02-11 17:36:19

+2

如果你必须使用文本,你必须使用文本。没有必要向任何人证明它的理由。 = o) – Echostorm 2009-02-11 17:52:27

回答

-2

如果这些不符合您的需求,您应该写一个扩展器或转换器并绑定到那个而不是使用其中一个枚举。

+0

不确定你指的是哪个枚举,但是发布在问题中的值是正确的。根据Reflector并查看Blend和VS.NET中的属性值。你能否详细说明一下?关于扩展器和转换器的想法,我没有看到转换器将如何帮助:S – PaulJ 2009-02-11 17:17:24

1

除了我的头顶,我可以想到两种不那么简单的方法来做到这一点。一个比较蹩脚;在单词之间添加空格。另一种方法是以某种方式解析文本,以便每个单词都是自己的文本块,然后可以使用网格左对齐一行的第一个单词并右对齐一行的最后一个单词,然后将其他块放入中心单元使用堆叠面板或类似物。

确定哪些单词是一行的开始和结尾会涉及测量每个块的渲染大小并决定它是否适合。这并不简单,但它应该工作。

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> 

下一个步骤是创建自定义面板:

<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支持和正确的行分裂。

相关问题