Search code examples
c#wpfxamlrowdefinitioncolumndefinition

Another Window In The Column Definition


I Have 2 Window In My Project. One Of This Is MainWindow.xaml Other One Is Control_Page.xaml. I Would Like To Insert Control Page Window To ColumnDefinition And RowDefinition. This Definitions Defined On MainWindow.

Here Is My Code:

<Grid x:Name="Grid_Main" SnapsToDevicePixels="True">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="312*"/>
        <ColumnDefinition Width="353*"/>
        <ColumnDefinition Width="351*"/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="187*"/>
        <RowDefinition Height="187*"/>
        <RowDefinition Height="186*"/>
        <RowDefinition Height="178*"/>
    </Grid.RowDefinitions>

    <Grid Grid.Column="0" Grid.Row="0" Margin="0"/>
    <Grid Grid.Column="1" Margin="0"/>
    <Grid Grid.Column="2" Margin="0"/>
    <Grid Margin="0" Grid.Row="1"/>
    <Grid Grid.Column="1" Margin="0" Grid.Row="1">
        <Button Content="Button" Margin="0" HorizontalAlignment="Center" VerticalAlignment="Center"/>
    </Grid>
    <Grid Grid.Column="2" Margin="0" Grid.Row="1">
        <Button x:Name="button1" Content="Button" HorizontalAlignment="Center" Margin="0" VerticalAlignment="Center"/>
    </Grid>
    <Grid Margin="0" Grid.Row="2"/>
    <Grid Grid.Column="1" Margin="0" Grid.Row="2"/>
    <Grid Grid.Column="2" Margin="0" Grid.Row="2"/>
    <Grid Margin="0" Grid.Row="3"/>
    <Grid Grid.Column="1" Margin="0" Grid.Row="3"/>
    <Grid Grid.Column="2" Margin="0" Grid.Row="3"/>
</Grid>

I Was Called The Control_Page To A Var. Then Try As Children To The Main Window But It Does Not Work.

I Tried This Can't Solve This Problem.

Code Behind;

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        var newWindow = new Control_Page();
        Grid.SetRow(newWindow, 0);
        Grid.SetColumn(newWindow, 0);
        Grid_Main.Children.Add(newWindow);
    }
}

Solution

  • Inserting a window as a child of another window is not possible, you will end up with a {"Window must be the root of the tree. Cannot add Window as a child of Visual."} exception.

    You can add your Control_Page.xaml as an UserControl to your grid. Herefore make sure to change to type from Window to UserControl in that .xaml file (and also in the corresponding .cs file)

    <Grid x:Name="Grid_Main" SnapsToDevicePixels="True">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="312*"/>
            <ColumnDefinition Width="353*"/>
            <ColumnDefinition Width="351*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="187*"/>
            <RowDefinition Height="187*"/>
            <RowDefinition Height="186*"/>
            <RowDefinition Height="178*"/>
        </Grid.RowDefinitions>
    
        <Control_Page Grid.Column="0" Grid.Row="0" />
    
        <Grid Grid.Column="0" Grid.Row="0" Margin="0"/>
        <Grid Grid.Column="1" Margin="0"/>
        <Grid Grid.Column="2" Margin="0"/>
        <Grid Margin="0" Grid.Row="1"/>
        <Grid Grid.Column="1" Margin="0" Grid.Row="1">
            <Button Content="Button" Margin="0" HorizontalAlignment="Center" VerticalAlignment="Center"/>
        </Grid>
        <Grid Grid.Column="2" Margin="0" Grid.Row="1">
            <Button x:Name="button1" Content="Button" HorizontalAlignment="Center" Margin="0" VerticalAlignment="Center"/>
        </Grid>
        <Grid Margin="0" Grid.Row="2"/>
        <Grid Grid.Column="1" Margin="0" Grid.Row="2"/>
        <Grid Grid.Column="2" Margin="0" Grid.Row="2"/>
        <Grid Margin="0" Grid.Row="3"/>
        <Grid Grid.Column="1" Margin="0" Grid.Row="3"/>
        <Grid Grid.Column="2" Margin="0" Grid.Row="3"/>
    </Grid>