如何使用xaml围绕点居中文本

时间:2010-05-15 02:35:35

标签: silverlight xaml

我希望能够将“hello”这个词放在特定点的中心位置。我需要在XAML中完全执行此操作而无需额外的代码。我可以说,XAML中的所有文本对齐属性/样式都作用于某些边界画布或其他元素中的文本。

由于我不知道我想要居中的文字的长度,我无法使用我自己的代码将其置于中心位置。

我需要在XAML中完全解决问题的原因是我没有使用WPF来创建XAML,我将它直接写入XML DOM。然后将其加载到Silverlight或WPF控件中进行显示。

在大多数图形语言中,包括我的代码所在的SVG,文本可以在没有边界框的情况下与“固定点”对齐。

任何建议赞赏

1 个答案:

答案 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>

顺便说一下,可能有更有效的方法来解决这个问题。我不保证!