C # WPF добавить элемент управления в главное окно во время выполнения - PullRequest
12 голосов
/ 15 октября 2011

Немного смешно, что я не могу найти простой ответ на это. Моя цель - добавить новый элемент управления изображением во время работы приложения.

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

Никогда не было так сложно добавить элемент с формами. Как я могу просто прикрепить этот новый элемент к главному окну (а не к другому элементу управления), чтобы он отображался.

Решил, я назвал основную сетку, и оттуда я смог получить доступ к атрибуту children и функции 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>

Ответы [ 3 ]

13 голосов
/ 15 октября 2011

У вас должен быть только один корневой элемент под окном. Добавление изображения с помощью this.AddChilda добавляет изображение в качестве дочернего элемента окна, но, вероятно, у вас есть другой определенный дочерний элемент (например, Grid). Дайте имя этому ребенку (в этом примере Grid), а затем в коде добавьте изображение в Grid

Пример:

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

</Grid>
</Window>

Тогда в коде использования

RootGrid.Children.Add(img);
4 голосов
/ 15 октября 2011

Что такое this в вашем случае? Вы можете попробовать this.Content = image; или this.Children.Add(image);

Если ваш this действительно Window, вы должны знать, что Window может иметь только одного ребенка, которого вы положили в Content. Если вам нужно несколько элементов в Window, обычно вы помещаете некоторый соответствующий контейнер (например, Grid или StackPanel) в качестве содержимого Window и добавляете в него дочерние элементы.

1 голос
/ 05 мая 2015

Влад получил решение.Я использовал это:

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