No estoy de acuerdo con las otras dos respuestas aquí. No es necesario agregar una cuadrícula para envolver el contenido. El stackpanel es suficiente.
En el xaml, agregue un panel de pila donde necesita que esté el contenido.
<StackPanel Name="myStack" Orientation="Horizontal"></StackPanel>
Luego, en el código subyacente, como en un controlador de botón o cuando la cantidad ventana Agregar este
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
Puede cambiar la ubicación de la imagen y el texto añadiendo el texto primero y luego el imagen.
Si no ve la imagen, asegúrese de que la acción de creación de la imagen esté configurada como recurso en la ventana de propiedades de la imagen.
Para que el código sea más útil o más dinámico, necesitaría una forma de cambiar el texto o la imagen.
lo que permite decir que querían cambiar esos y de seguir adelante y hacer un
((TextBlock)FindName("myText")).Text = "my other cool pic";
se esperaría que el texto sea cambiado pero lo que pasa?
Object reference not set to an instance of an object.
Drats pero le di un nombre. Debería agregar
// register the new control
RegisterName(text.Name, text);
Para que pueda acceder al bloque de texto más tarde. Esto es necesario porque usted agregó el control al marco después de que fue construido y mostrado.Así que el código final se ve así después de registrar la imagen también
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 answer !! – CharlieShi