J'essaie de créer une toile avec des barres de défilement. Quelqu'un peut-il m'aider à donner des idées sur la façon de faire cela? J'ai déjà essayé d'utiliser la grille de 1 rangée et 1 colonne, mais en raison de certaines contraintes, je veux utiliser une toile. P>
Merci d'avance! P>
3 Réponses :
Vous pouvez mettre la toile à l'intérieur d'une notification de défilement. J'ai essayé ce test rapide et cela m'a permis de faire défiler le contenu de la toile. EDIT: Voici un exemple où les barres de défilement apparaissent que si nécessaire, et cela change de manière dynamique. Comme la taille de toile change. p> private void ChangeCanvasSize_Click(object sender, RoutedEventArgs e)
{
TestCanvas.Width = 600;
TestCanvas.Height = 600;
}
Merci pour votre réponse. Mais la chose est que je ne connais pas la taille de ma toile avant le temps d'exécution. Donc ne peut pas avoir une toile de taille fixe. Je vais augmenter la dimension de la toile si l'utilisateur, disons, clique sur la limite de la toile existante que la largeur de toile et / ou la hauteur augmenteront par exemple 50 unités et la barre de défilement doit apparaître.
Cela devrait toujours fonctionner si vous définissez la visibilité des barres de défilement sur "Auto". J'ai modifié mon exemple pour illustrer.
OK après avoir travaillé avec cela pendant un certain temps, j'ai compris un moyen. Créez un XAML comme celui-ci
double dHeight = 220; if (drawingCanvas.Height < CurrentPosition.Y + dHeight) { // increase canvas height drawingCanvas.Height += (2 * dHeight); }
En combinant la réponse de Mario-Sannum et de votre question, j'ai fait une solution qui devrait fonctionner correctement dans la plupart des cas.
<ScrollViewer> <Grid x:Name="drawingGrid" SizeChanged="drawingGrid_SizeChanged"> <Canvas Name="c"> <TextBlock x:Name="draw_Text" Text="Test Test"/> </<Canvas> </Grid> </ScrollViewer> void drawingGrid_SizeChanged(object sender, SizeChangedEventArgs e) { try { c.Height = draw_Text.ActualHeight; } catch { } try { c.Width = draw_Text.ActualWidth; } catch { } }