我希望能够将“hello”这个词放在特定点的中心位置。我需要在XAML中完全执行此操作而无需额外的代码。我可以说,XAML中的所有文本对齐属性/样式都作用于某些边界画布或其他元素中的文本。
由于我不知道我想要居中的文字的长度,我无法使用我自己的代码将其置于中心位置。
我需要在XAML中完全解决问题的原因是我没有使用WPF来创建XAML,我将它直接写入XML DOM。然后将其加载到Silverlight或WPF控件中进行显示。
在大多数图形语言中,包括我的代码所在的SVG,文本可以在没有边界框的情况下与“固定点”对齐。
任何建议赞赏
答案 0 :(得分:0)
(是的,我知道这个问题已经过时了。)
此解决方案的有效性可能因您使用的Silverlight或.NET Framework版本而异,我还没有尝试使用Silverlight for Windows Phone 7.我为独立的WPF应用程序编写了一个版本,并且我写了另一个版本,也适用于Silverlight。
首先,在Silverlight和WPF中运行的版本。请注意,如果您没有使用Canvas为TextBlock的中心提供绝对位置,则需要稍微重构一下代码。例如,您可能正在使用TranslateTransform来定位文本。
<Canvas>
<Canvas.Resources>
<ScaleTransform x:Key="transform" ScaleX="-1" ScaleY="-1" />
</Canvas.Resources>
<Grid RenderTransform="{StaticResource transform}" RenderTransformOrigin="-.25 -.25">
<TextBlock RenderTransform="{StaticResource transform}">
Hello!
</TextBlock>
</Grid>
</Canvas>
其次,仅适用于WPF的版本。它在Silverlight中不起作用,因为它取决于Canvas.Right和Canvas.Bottom附加属性的存在。 UniformGrid也不在Silverlight中,但该代码可能已被具有2个星号行和列的常规Grid替换。
<Canvas>
<UniformGrid Rows="2" Columns="2"
DataContext="{Binding ElementName=textBox1}"
Width="{Binding Path=ActualWidth}"
Height="{Binding Path=ActualHeight}">
<Canvas>
<TextBlock Name="textBox1" Canvas.Right="0" Canvas.Bottom="0">
Hello!
</TextBlock>
</Canvas>
</UniformGrid>
</Canvas>
顺便说一下,可能有更有效的方法来解决这个问题。我不保证!