Я не согласен с двумя другими ответами здесь. Нет необходимости добавлять сетку для переноса содержимого. Стеклопанели достаточно.
В xaml добавьте панель стека туда, где вам нужно содержимое.
<StackPanel Name="myStack" Orientation="Horizontal"></StackPanel>
Затем в коде позади, как в обработчике кнопок или при загрузке окна, добавьте это
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
Вы можете поменять местами изображение и текст, добавив сначала текст, затем изображение.
Если вы не видите изображение, убедитесь, что для действия по сборке изображения установлено значение ресурса в окне свойств изображения.
Чтобы код был более полезным и динамичным, вам потребуется способ изменить либо текст, либо изображение.
Итак, допустим, вы хотели изменить их, и вы продолжаете и делаете
((TextBlock)FindName("myText")).Text = "my other cool pic";
Вы ожидаете, что текст будет изменен, но что произойдет?
Object reference not set to an instance of an object.
Drats, но я дал ему имя. Вам нужно было бы добавить
// register the new control
RegisterName(text.Name, text);
Чтобы вы могли получить доступ к текстовому блоку позже. Это необходимо, потому что вы добавили элемент управления в каркас после его построения и отображения. Итоговый код выглядит так же после регистрации изображения
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);