2011-10-14 6 views
8

Một chút lố bịch mà tôi không thể tìm thấy câu trả lời đơn giản cho điều này. Mục tiêu của tôi là đính kèm một điều khiển hình ảnh mới trong khi ứng dụng đang chạy.C# WPF thêm điều khiển vào cửa sổ chính tại thời điểm chạy

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

Ive đã cố gắng

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

Đó là không bao giờ khó khăn này để thêm một phần tử với hình thức. Làm cách nào tôi có thể chỉ cần đính kèm phần tử mới này vào cửa sổ chính (không phải một điều khiển khác) để nó hiển thị.

Giải quyết nó, tôi đặt tên cho chính lưới, và từ đó tôi đã có thể truy cập vào thuộc tính trẻ em và tiện ích chức năng

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> 

Trả lời

3

this trong trường hợp của bạn là gì? Bạn có thể thử this.Content = image; hoặc this.Children.Add(image);

Nếu bạn this thực sự là một Window là, bạn nên biết rằng Window có thể chỉ có một đứa con duy nhất, mà bạn đưa vào Content. Nếu bạn muốn một số mặt hàng trong Window, thường bạn đặt một số vùng chứa thích hợp (ví dụ: Grid hoặc StackPanel) làm nội dung của Cửa sổ và thêm trẻ em vào đó.

+0

Đây là cửa sổ chính: http://screensnapr.com/v/OROEvt.png không có thuộc tính con. Tôi cần thêm nó vào lưới, phần tử đang giữ nút và hộp văn bản bạn nhìn thấy trong hình này – Drake

+0

Có, Cửa sổ chỉ có Nội dung. Nội dung của cửa sổ của bạn hơn là gì? Bạn nên thêm không vào cửa sổ, nhưng vào vùng chứa bên trong thích hợp. Đó là cách quản lý bố cục hoạt động :-) – Vlad

10

Bạn chỉ nên có một phần tử gốc trong cửa sổ. Thêm hình ảnh bằng cách sử dụng this.AddChilda thêm hình ảnh như là con của cửa sổ, nhưng bạn có thể có một số đứa trẻ khác được xác định (Grid ví dụ). Đặt tên cho đứa trẻ này (Lưới trong ví dụ) và sau đó trong các mã sau thêm hình ảnh vào lưới

Ví dụ:

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

</Grid> 
</Window> 

Sau đó, trong các mã sau sử dụng

RootGrid.AddChild(img); 
1

Vlad có giải pháp. Tôi đã sử dụng nó:

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