繁体   English   中英

用其他XAML文件中的网格替换内容WPF网格控件

[英]Replace contents WPF grid control by grid in other XAML file

我正在尝试用代码(c#)的第二个XAML文件中定义的另一个WPF网格替换WPF网格控件的内容。

(简化示例)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>

Windows1.xaml.cs背后的代码中的MenuItem_Click事件包含:

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文件“嵌入”网格,请告诉我。

谢谢罗比

替换gridContent变量的值不会对控件树产生影响。 您必须首先从其父级断开grid2,然后将其添加到gridContent的子级,如下所示:

win2.Content = null;
gridContent.Children.Add(win2.grid2);

这可行(我尝试过),但是不建议创建窗口 ,提取其内容然后将其放置在另一个窗口中。 您应该使用UserControl代替Window2,然后可以将其直接放在gridContent内

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM