Я пытаюсь заменить содержимое элемента управления сеткой WPF другой сеткой WPF, определенной во втором файле XAML в коде (C#).Заменить содержимое Управление сеткой WPF сеткой в другом файле XAML
(упрощенный пример) Window1.xaml:
<Window x:Class="Demo1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Header="_Set Grid" Click="MenuItem_Click" />
</Menu>
<StatusBar DockPanel.Dock="Bottom">
<StatusBarItem Name="statusItem">Status</StatusBarItem>
</StatusBar>
<Grid Name="header" DockPanel.Dock="Top">
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock Name="txtHi" Grid.Row="0" Grid.Column="0">Hi</TextBlock>
<TextBlock Name="txtName" Grid.Row="0" Grid.Column="1">X</TextBlock>
</Grid>
<Grid Name="gridContent">
</Grid>
</DockPanel>
Windows2.xaml содержит сетку, которая заменяет gridContent
<Window x:Class="Demo1.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window2" Height="300" Width="300">
<Grid Name="grid2">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Label Grid.Column="1" Grid.Row="1">Hello !!!</Label>
</Grid>
Событие MenuItem_Click в коде за Windows1.xaml.cs содержит:
private void MenuItem_Click(object sender, RoutedEventArgs e)
{
Window2 win2 = new Window2();
gridContent = win2.grid2;
setStatus();
}
private void setStatus() {
statusItem.Content = "gridContent has " + gridContent.RowDefinitions.Count + " rows and " + gridContent.ColumnDefinitions.Count + " columns.";
}
Хотя statusItem говорят gridContent содержит 2 строки и 2 столбца после щелчка по меню, окно не изменяется и не содержит текст Hello !!!
Любые идеи, что я делаю неправильно? Если есть лучшие решения для «встраивания» сетки из второго файла xaml, пожалуйста, дайте мне знать.
Спасибо, Робби
Это к сожалению возвращает exec: «Указанный элемент уже является логическим дочерним элементом другого элемента. Сначала отключите его». – Robbie
Правильно, логично, извините. Я обновил ответ. – Timores
Это сделало трюк, но я буду следовать вашим советам и использовать UserControl. Thx – Robbie