gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:18:26 24 4
gpt4 key购买 nike

我正在尝试用代码(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内。

关于c# - 用其他XAML文件中的网格替换内容WPF网格控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2393283/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com