Je ne suis pas d'accord avec les deux autres réponses ici. Il n'est pas nécessaire d'ajouter une grille pour envelopper le contenu. Le panneau de la pile est suffisant.
Dans le xaml, ajoutez un panneau de piles là où vous avez besoin du contenu.
<StackPanel Name="myStack" Orientation="Horizontal"></StackPanel>
Puis dans le code derrière, comme dans un gestionnaire de bouton ou lorsque les charges de fenêtre ajouter cette
Image coolPic = new Image() {
Name="pic",
Source = new BitmapImage(new Uri("pack://application:,,,/images/cool.png")),
Stretch = Stretch.None // this preserves the original size, fill would fill
};
TextBlock text = new TextBlock() {
Name = "myText",
Text = "This is my cool Pic"
};
myStack.Children.Add(coolPic); // adding the pic first places it on the left
myStack.Children.Add(text); // the text would show up to the right
Vous pouvez échanger l'emplacement de l'image et le texte en ajoutant le texte d'abord, puis la image.
Si vous ne voyez pas l'image, vérifiez que l'action de construction de l'image est définie sur ressource dans la fenêtre des propriétés de l'image. Pour que le code soit plus utile et/ou plus dynamique, vous avez besoin d'un moyen de modifier le texte ou l'image.
Disons donc que vous ne vouliez changer ceux-ci et aller de l'avant et faire une
((TextBlock)FindName("myText")).Text = "my other cool pic";
que vous attendez que le texte soit modifié, mais ce qui se passe?
Object reference not set to an instance of an object.
Drats mais je lui ai donné un nom. Vous devez ajouter
// register the new control
RegisterName(text.Name, text);
Pour que vous puissiez accéder au bloc de texte plus tard. Cela est nécessaire car vous avez ajouté le contrôle au framework après sa construction et son affichage.Donc, le code final ressemble à ceci après l'enregistrement de l'image aussi
Image coolPic = new Image() {
Name="pic",
Source = new BitmapImage(new Uri("pack://application:,,,/images/cool.png")),
Stretch = Stretch.None // this preserves the original size, fill would fill
};
// register the new control
RegisterName(coolPic.Name, coolPic);
TextBlock text = new TextBlock() {
Name = "myText",
Text = "This is my cool Pic"
};
// register the new control
RegisterName(text.Name, text);
myStack.Children.Add(coolPic);
myStack.Children.Add(text);
Greate réponse !! – CharlieShi