2011-10-14 15 views
8

È un po 'ridicolo che non riesca a trovare una risposta semplice a questo. Il mio obiettivo è collegare un nuovo controllo immagine mentre l'applicazione è in esecuzione.C# WPF aggiunge il controllo alla finestra principale in fase di esecuzione

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

Ive ha provato

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

Non è mai stato così difficile per aggiungere un elemento con le forme. Come posso semplicemente collegare questo nuovo elemento alla finestra principale (non un altro controllo) in modo che venga visualizzato.

risolto, ho chiamato il principale griglia, e da lì sono stato in grado di accedere attribuiscono i bambini e la funzione add

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> 

risposta

3

Qual è this nel vostro caso? Si può provare this.Content = image; o this.Children.Add(image);

Se il this è davvero un Window, si deve sapere che Window può avere un solo figlio, che si mette in Content. Se si desidera più elementi in Window, in genere si inserisce un contenitore appropriato (ad esempio, Grid o StackPanel) come contenuto di Windows e si aggiungono i figli ad esso.

+0

Questa è la finestra principale: http://screensnapr.com/v/OROEvt.png non ha attributo figli. Devo aggiungerlo alla griglia, l'elemento che contiene il pulsante e la casella di testo che vedi in questa immagine – Drake

+0

Sì, la finestra ha solo contenuto. Qual è il contenuto della tua finestra? Dovresti aggiungere non alla finestra, ma al contenitore interno appropriato. Ecco come funziona la gestione del layout :-) – Vlad

10

Si dovrebbe avere un solo elemento radice sotto finestra. Aggiungendo l'immagine usando this.AddChilda aggiunge l'immagine come figlio della finestra, ma probabilmente hai qualche altro figlio definito (Grid per esempio). Dare un nome a questo bambino (griglia nell'esempio) e poi nel codice aggiungere dietro l'immagine alla griglia

Esempio:

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

</Grid> 
</Window> 

Poi nel codice dietro uso

RootGrid.AddChild(img); 
1

Vlad ha trovato la soluzione. L'ho usato:

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); 
Problemi correlati