2011-10-14 19 views
8

これはちょっとばかげて、これに簡単な答えが見つかりません。 私の目標は、アプリケーションの実行中に新しい画像コントロールを接続することです。C#WPFは実行時にメインウィンドウにコントロールを追加します

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

アイブ氏は、それはフォームを持つ要素を追加するには、この困難はなかった

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

を試してみました。 この新しい要素を(別のコントロールではなく)メインウィンドウに添付して表示させるにはどうすればいいですか?

は、私は、グリッドの主の名前、それを解決し、そこから私は、子供たちが属性にアクセスすることができたし、追加機能

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> 

答えて

3

は、あなたのケースでthisは何ですか?あなたのthisは、あなたがWindowあなたがContentに入れるだけで、単一の子を持つことができることを知っている必要があり、実際にWindowされている場合は、this.Content = image;this.Children.Add(image);

を試すことができます。 Windowに複数の項目が必要な場合は、通常、適切なコンテナ(たとえば、GridまたはStackPanel)をWindowのコンテンツとして配置し、子を追加します。

+0

これはメインウィンドウです:http://screensnapr.com/v/OROEvt.pngそれは子供の属性がありません。グリッドに追加する必要があります。この画像に表示されるボタンとテキストボックスを保持している要素です。 – Drake

+0

はい、ウィンドウにはコンテンツしかありません。あなたのウィンドウの内容は何ですか?ウィンドウにではなく、適切な内部コンテナに追加する必要があります。それはレイアウト管理の仕組みです:-) – Vlad

10

ウィンドウの下にルート要素が1つだけある必要があります。 this.AddChildaを使用してイメージを追加すると、そのイメージがウィンドウの子として追加されますが、他の子が定義されている可能性があります(たとえばGrid)。この子(この例ではグリッド)に名前を与えると、コードに後ろグリッド

例にイメージを追加する:使用

RootGrid.AddChild(img); 
1

背後コードに続い

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

</Grid> 
</Window> 

Vladは解決策を得た。私はそれを使用しました:

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); 
関連する問題