我正在尝试用代码(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>
Run Code Online (Sandbox Code Playgroud)
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>
Run Code Online (Sandbox Code Playgroud)
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.";
}
Run Code Online (Sandbox Code Playgroud)
虽然statusItem说gridContent在菜单上单击后包含2行和2列,但窗口没有更改,并且不包含文本Hello !!!
我有什么想法我做错了吗?如果有更好的解决方案从第二个xaml文件"嵌入"网格,请告诉我.
谢谢,罗比
替换gridContent变量的值不会对控件树产生影响.您必须首先断开grid2与其父级的连接,然后将其添加到gridContent的子级,如下所示:
win2.Content = null;
gridContent.Children.Add(win2.grid2);
Run Code Online (Sandbox Code Playgroud)
这工作(我试过),但它不是建议的方法来创建一个窗口,提取其内容然后将其放在另一个窗口.您应该使用UserControl代替Window2,然后您可以将它直接放在gridContent中.
归档时间: |
|
查看次数: |
10145 次 |
最近记录: |