Comment dessiner un rectangle dans WPF à un certain x,y de l'écran de l'emplacement?
En C#, WPF, j'ai créé un rectangle:
Rectangle myRgbRectangle = new Rectangle();
myRgbRectangle.Width = 1;
myRgbRectangle.Height = 1;
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
Oui, vraiment, je veux juste qu'il soit de 1 pixel par 1 pixel. Et je veux changer de couleur en fonction de la hauteur variable comme ceci:
mySolidColorBrush.Color = Color.FromArgb(255, 0, 0, (byte)height);
myRgbRectangle.Fill = mySolidColorBrush;
Maintenant, comment puis je tire sur un x,y de l'emplacement sur l'écran? J'ai une grille (myGrid) sur mon MainWindow.xaml.
Merci!
Voici le code:
myRgbRectangle.Width = 1;
myRgbRectangle.Height = 1;
SolidColorBrush mySolidColorBrush = new SolidColorBrush();
int height;
for (int i = 0; i < ElevationManager.Instance.heightData.GetLength(0); i++)
for (int j = 0; j < ElevationManager.Instance.heightData.GetLength(1); j++)
{
height = ElevationManager.Instance.heightData[i, j] / 100;
//Describes the brush's color using RGB values.
//Each value has a range of 0-255.
mySolidColorBrush.Color = Color.FromArgb(255, 0, 0, (byte)height);
myRgbRectangle.Fill = mySolidColorBrush;
myCanvas.Children.Add(myRgbRectangle);
Canvas.SetTop(myRgbRectangle, j);
Canvas.SetLeft(myRgbRectangle, i);
Et c'est jeter cette erreur: Visuel Spécifié est déjà un enfant d'un autre Visuel ou la racine d'un CompositionTarget.
Le nombre de 1 pixel de rectangles allez-vous créer?
Une tonne de ces 3600 x 3600. Vraiment, je veux juste attirer de pixels de couleurs.
Eh bien, ce serait d'environ 13 millions de rectangles. Impossible! Et vous avez déjà la réponse (commentaire) sur votre question précédente: WriteableBitmap est le uniquement sensible.
Je ne comprends pas pourquoi cela est impossible. Et j'ai dit que WriteableBitmap a une fuite de mémoire. Aussi, je ne peux pas utiliser code "potentiellement dangereux".
C'est tout simplement parce que WPF est tout au sujet de graphiques vectoriels. Il essaie de se débarrasser de pixels et attire tout par le biais de zones remplies avec des limites définies par floating-point de coordonnées. Voir carte Graphique et Multimédia.
Une tonne de ces 3600 x 3600. Vraiment, je veux juste attirer de pixels de couleurs.
Eh bien, ce serait d'environ 13 millions de rectangles. Impossible! Et vous avez déjà la réponse (commentaire) sur votre question précédente: WriteableBitmap est le uniquement sensible.
Je ne comprends pas pourquoi cela est impossible. Et j'ai dit que WriteableBitmap a une fuite de mémoire. Aussi, je ne peux pas utiliser code "potentiellement dangereux".
C'est tout simplement parce que WPF est tout au sujet de graphiques vectoriels. Il essaie de se débarrasser de pixels et attire tout par le biais de zones remplies avec des limites définies par floating-point de coordonnées. Voir carte Graphique et Multimédia.
OriginalL'auteur zetar | 2012-10-06
Vous devez vous connecter pour publier un commentaire.
Vous devez utiliser un
Toile
istead d'unGrille
. Vous utilisez les coordonnées de la position des éléments dans unCanvas
contre de Ligne et de Colonne dans unGrid
.Définition d'une Toile:
Ensuite, vous devez utiliser
Toile.SetTop
etToile.SetLeft
les Propriétés de ce type (en supposant que votre toile est nommémyCanvas
):Modifier
Basé sur votre montage, il est comme je l'ai dit vous êtes en ajoutant le même rectangle plus d'une fois. Vous devez créer dans votre Boucle à chaque fois que vous l'ajouter. Quelque chose comme cela.
Voir L'edit je viens de faire.
C'est jeter cette erreur: Visuel Spécifié est déjà un enfant d'un autre Visuel ou la racine d'un CompositionTarget. Des idées?
avez-vous déjà ajouté votre rectangle à un autre objet Conteneur?
J'ai mis à jour la question d'origine de sorte que vous pourriez voir tout le code... non, je ne pense pas que le rectangle est ajouté à un autre objet Conteneur.
OriginalL'auteur Mark Hall