2010-05-18 4 views
0

J'ai un MainView qui contient une barre de navigation qui sélectionne l'une des nombreuses pages XAML à afficher dans le volet d'affichage de la page. La MainView contient un ScrollViewer autour des pages. Cela permet aux pages d'avoir la taille dont elles ont besoin et le ScrollViewer de MainView les fait défiler. Tout cela fonctionne très bien.Centrer un TextBox en haut d'un ScrollViewer dans WPF

Sur l'une des pages, je dois centre (parfois) une zone de texte au milieu du panneau d'affichage de la page (sur la partie supérieure du contenu de la page). Cela a été facilement fait en plaçant à la fois le contenu de la page et le TextBox se chevauchant dans une grille (et je cache le TextBox si nécessaire). Tout cela semble fonctionner très bien.

Cependant, si le contenu de la page pousse à être plus grande que le volet, la zone de texte est centré non pas sur le volet, mais sur le contenu de la page complète. Ainsi, il se déplace de l'écran central vers le bas et/ou vers la droite (et éventuellement hors de l'écran). Bummer.

Options:

  1. Retirez le ScrollViewer du MainView. Cela nécessiterait d'en placer un sur chaque page! Argh.

  2. Do option # 1, et de créer une classe de base ScrolledPage. C'est beaucoup de travail, et je m'inquiète des problèmes d'outils (problèmes de mélange). Il faut également changer chaque page (pour sous-classer cette page).

  3. outrepasser D'une certaine façon ScrollViewer uniquement sur cette page. Ensuite, placez un autre ScrollViewer sur le contenu de la page pour le faire défiler.

L'option 3 semble préférable, car il ne s'agit que de modifier cette page (au lieu de changer le reste des pages). Cependant, je ne peux pas comprendre comment le faire. Des idées?

Merci d'avance!

Eric

+0

la zone de texte Si toujours rester centrée et au-dessus du contenu de la page ?? Si oui, utilisez un dockpanel et ancrez le contenu de la page et la zone de texte en conséquence. Ou utilisez une grille pour les garder séparés. – ArchAngel

Répondre

0

pourquoi ne pas mettre cette TextBox dans une grille avec le ScrollViewer?

Comme

<Grid> 
    <TextBox 
    Text="{Binding Path=MyText}" 
    Visibility="{Binding SomeProperty}" 
    HorizontalAlignment="Center" 
    VerticalAlignment="Center" /> 
    <ScrollViewer /> 
</Grid> 

Cheers, Alex