在我的项目中,我有固定的页眉和页脚,以及可变的内容。所以我已经将ContentControl放在了我的窗口中。
<Grid>
<Canvas Name="canvas_Logo" HorizontalAlignment="Center" VerticalAlignment="Top" Width="180">
<Image Source="Images/k1.png" Grid.Row="1" Width="180" />
</Canvas>
<ContentControl VerticalAlignment="Center" Name="CC1" Grid.Row="2" Height="450"/>
<Canvas x:Name="canvas_Marque" ClipToBounds="True" Height="60" HorizontalAlignment="Center" VerticalAlignment="Bottom" Width="1022" Background="DarkRed" />
</Grid>
看起来是这样的...
我创建了两个名为page1、Page2用户控件。第1页有一个按钮,当我单击该按钮时,ContentControl有显示Page2。
所以我用button1_Click编写了下面的代码
MainPage n = new MainPage();
n.CC1.Content = new Page2();
但是在点击按钮的时候ContentControl没有改变我能做什么呢?
我的page1 xaml
<Grid Background="AliceBlue">
<Label Content="Child1" Height="28" HorizontalAlignment="Left" Margin="74,65,0,0" Name="label1" VerticalAlignment="Top" Width="157" />
<Button Content="load page2 and destroy this" Height="31" HorizontalAlignment="Left" Margin="79,124,0,0" Name="button1" VerticalAlignment="Top" Width="186" Click="button1_Click" />
</Grid>
第2页xaml
<Grid Background="CadetBlue">
<Label Content="This is page 2" Height="28" HorizontalAlignment="Left" Margin="96,82,0,0" Name="label1" VerticalAlignment="Top" Width="148" />
</Grid>
如何更改WPF中的内容控件内容?
啊,我的朋友...我们又见面了...很高兴看到你的项目有了进展...
现在,我的下一个建议是:不要从后面的代码中执行这些操作...让XAML绑定工作...
通常,使用MVVM,您将在基本视图模型类型的属性上绑定内容控件源。因此,让我们假设vm1
和vm2
都扩展了basicviewmodel
,并且您有一个如下定义的属性:
Public BasicViewModel Current_VM {get;set;}
现在,当您想要交换时,您需要做的就是将current_vm
从vm1
更改为vm2
,而绑定将完成其余的工作,将您的窗口更新到正确的视图(假设您设置了数据模板..但您从未说明是否使用MVVM...)
您不能从Page1用户控件实例化一个新的MainPage,因为MainPage已经是Page1的宿主(如果我没理解错的话)。如果您要从代码指令(而不是最佳实践ref.@noctis)管理页面,那么在本例中,您必须从mainpage.xaml.cs完成所有工作。然后,您必须找到某种方法将参数传递回MainPage以更改内容。通常这是在ViewModel中完成的,正如@Noctis所说。