2011-10-14 9 views
8

Es un poco ridículo que no pueda encontrar una respuesta simple a esto. Mi objetivo es adjuntar un nuevo control de imagen mientras la aplicación se está ejecutando.C# WPF agrega control a la ventana principal en tiempo de ejecución

img = new System.Windows.Controls.Image(); 
img.Margin = new Thickness(200, 10, 0, 0); 
img.Width = 32; 
img.Height = 32; 
img.Source = etc; 

He intentado

this.AddChild(img);// says must be a single element 
this.AddLogicalChild(img);// does nothing 
this.AddVisualChild(img);// does nothing 

Nunca fue tan difícil para agregar un elemento de formas. ¿Cómo puedo simplemente adjuntar este nuevo elemento a la ventana principal (no a otro control) para que se muestre?

lo resolvió, puse el nombre de la red principal, y desde allí pude acceder a la atribuyen a los niños y la función de complemento

main.children.add(img); 

<Window x:Class="Crysis_Menu.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded" AllowsTransparency="False" Background="White" Foreground="{x:Null}" WindowStyle="SingleBorderWindow"> 
    <Grid Name="main"> 
     <Button Content="Run" Height="23" HorizontalAlignment="Left" Margin="12,12,0,0" Name="btnRun" VerticalAlignment="Top" Width="151" Click="btnRun_Click" /> 
     <TextBox Height="259" HorizontalAlignment="Left" Margin="12,40,0,0" Name="tbStatus" VerticalAlignment="Top" Width="151" /> 
    </Grid> 
</Window> 

Respuesta

3

¿Cuál es this en su caso? Usted puede tratar de this.Content = image; o this.Children.Add(image);

Si su this es de hecho un Window, usted debe saber que Window puede tener un solo hijo, que usted pone en Content. Si desea varios elementos en Window, generalmente coloca un contenedor apropiado (por ejemplo, Grid o StackPanel) como contenido de Windows y agrega elementos secundarios.

+0

Esta es la ventana principal: http://screensnapr.com/v/OROEvt.png no tiene ningún atributo de niños. Necesito agregarlo a la cuadrícula, el elemento que está sosteniendo el botón y el cuadro de texto que ve en esta imagen – Drake

+0

Sí, la ventana solo tiene contenido. ¿Cuál es el contenido de tu ventana? Debe agregar no a la ventana, sino al contenedor interno apropiado. Así es como funciona la gestión del diseño :-) – Vlad

10

Solo debe tener un elemento raíz debajo de la ventana. Agregar la imagen usando this.AddChilda agrega la imagen como elemento secundario de la ventana, pero es probable que tenga algún otro elemento secundario definido (Grid, por ejemplo). Dar un nombre a este niño (Cuadrícula en el ejemplo) y luego en el código añadir detrás de la imagen a la red

Ejemplo:

<Window> 
<Grid x:Name="RootGrid"> 

</Grid> 
</Window> 

Luego, en el código detrás de uso

RootGrid.AddChild(img); 
1

Vlad obtuvo la solución. Lo utilicé:

var grid = this.Content as Grid; 

// or any controls 
Label lblMessage = new Label 
{ 
    Content = "I am a label", 
    Margin = new Thickness(86, 269, 0, 0) 
}; 

grid.Children.Add(lblMessage); 
Cuestiones relacionadas