(Да, я знаю, что этот вопрос старый.)
Эффективность этого решения может варьироваться в зависимости от используемой вами версии Silverlight или .NET Framework, и я не пробовал его с Silverlight для 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, но этот код можно было бы заменить обычной сеткой с двумя строками и столбцами длиной в звездочку.
<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>
Кстати, могут быть более эффективные способы решения этой проблемы. Я не даю никаких гарантий!