С# WPF добавить элемент управления в основное окно во время выполнения
Немного смешно, что я не могу найти простой ответ на этот вопрос.
Моя цель - прикрепить новый элемент управления изображением во время работы приложения.
img = new System.Windows.Controls.Image();
img.Margin = new Thickness(200, 10, 0, 0);
img.Width = 32;
img.Height = 32;
img.Source = etc;
Ive попробовал
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>
Ответы
Ответ 1
У вас должен быть только один корневой элемент под окном. Добавление изображения с использованием this.AddChilda добавляет изображение в качестве дочернего элемента окна, но, вероятно, у вас есть другой определенный дочерний элемент (например, Grid). Дайте имя этому ребенку (в этом примере Grid), а затем в коде добавьте изображение в Grid.
Пример:
<Window>
<Grid x:Name="RootGrid">
</Grid>
</Window>
Тогда в коде позади использования
RootGrid.Children.Add(img);
Ответ 2
Что такое this
в вашем случае? Вы можете попробовать this.Content = image;
или this.Children.Add(image);
Если ваш this
действительно является Window
, вы должны знать, что Window
может иметь только один дочерний элемент, который вы помещаете в Content
. Если вам нужно несколько элементов в Window
, обычно вы помещаете в соответствующий контейнер содержимое контейнера (например, Grid
или StackPanel
) и добавляете к нему детей.
Ответ 3
Влад получил решение. Я использовал его:
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);