2010-05-15 6 views
0

Je voudrais pouvoir placer le mot "bonjour" centré sur un point spécifique. Je dois le faire complètement en XAML sans code supplémentaire. Le mieux que je puisse dire, toutes les propriétés/styles d'alignement du texte en XAML agissent sur du texte dans un canevas de délimitation ou un autre élément.Comment centrer le texte autour du point en utilisant xaml

Puisque je ne connais pas la longueur du texte que je veux centrer, je ne peux pas le centrer en utilisant mon propre code.

La raison pour laquelle j'ai besoin de résoudre entièrement le problème en XAML est que je n'utilise pas WPF pour créer le XAML, je l'écris directement sur un DOM XML. Il sera ensuite chargé dans un contrôle Silverlight ou WPF pour l'affichage.

Dans la plupart des langages graphiques, y compris SVG, d'où provient mon code, le texte peut être aligné sur un "point fixe" sans cadre de sélection.

Toutes les suggestions appréciées

+0

Aucune réponse pour le moment ... Cela semble être un réel défaut de xaml/silverlight. Nous avons décidé d'utiliser notre contrôle silverlight pour "corriger" le mauvais rendu d'alignement de Silverlight. Une fois l'image entière rendue, nous retournons par programme et alignons tous les objets de texte dans le document comme ils devraient l'être. hack horrible, mais va travailler pour le moment. Je salue toujours les solutions propres –

Répondre

0

(Oui, je sais que cette question est vieux.)

L'efficacité de cette solution peut varier avec la version de Silverlight ou le .NET Framework que vous utilisez, et havre de paix I Je n'ai pas essayé avec Silverlight pour Windows Phone 7. J'ai écrit une version pour les applications WPF autonomes, et j'ai écrit une autre version qui fonctionne également dans Silverlight.

D'abord, la version qui fonctionne dans Silverlight et WPF. Veuillez noter que vous devrez refactoriser le code un peu si vous n'utilisez pas de Canvas pour fournir une position absolue pour le centre de votre TextBlock. Par exemple, vous pouvez utiliser un TranslateTransform pour positionner votre texte.

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

Deuxièmement, la version qui fonctionne uniquement dans WPF. Cela ne fonctionne pas dans Silverlight car cela dépend de la présence des propriétés attachées Canvas.Right et Canvas.Bottom. UniformGrid n'est pas non plus dans Silverlight, mais ce code aurait pu être remplacé par une grille régulière avec 2 lignes et colonnes de longueur étoile.

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

Par ailleurs, il peut y avoir des moyens plus efficaces de résoudre ce problème. Je ne fais aucune garantie!

+0

J'ai dû ajouter 'RenderTransformOrigin =" 0.5,0.5 "' au TextBlock pour le centrer dans une bordure extérieure. (sur WinRT/Windows 8 Store) – Nathan

Questions connexes