Non sono d'accordo con le altre due risposte qui. Non è necessario aggiungere una griglia per avvolgere il contenuto. Lo stackpanel è sufficiente.
Nell'xaml aggiungere un pannello di stack al punto in cui è necessario il contenuto.
<StackPanel Name="myStack" Orientation="Horizontal"></StackPanel>
Poi nel codice dietro, come in un gestore di pulsante o quando i carichi window Aggiungi questa
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
È possibile scambiare la posizione dell'immagine e il testo con l'aggiunta del testo prima poi il Immagine.
Se non si vede l'immagine, assicurarsi che l'azione di creazione dell'immagine sia impostata su risorsa nella finestra delle proprietà dell'immagine.
Affinché il codice sia più utile eo più dinamico, è necessario un modo per modificare il testo o l'immagine.
Quindi diciamo che si voleva cambiare quelle e di andare avanti e fare un
((TextBlock)FindName("myText")).Text = "my other cool pic";
Ci si aspetta il testo da modificare, ma che succede?
Object reference not set to an instance of an object.
Drats ma gli ho dato un nome. Dovresti aggiungere
// register the new control
RegisterName(text.Name, text);
In modo da poter accedere al blocco di testo in un secondo momento. Questo è necessario perché hai aggiunto il controllo al framework dopo che è stato creato e visualizzato.Quindi il codice finale appare così dopo aver registrato anche l'immagine
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);
Risposta immediata !! – CharlieShi