常常遇到在一个主界面,通过不同按键或者菜单,让主显示框加载不同窗口的功能,类似360杀毒软件或者常见的web里的不同频道的功能,将白了,就是只替换主体部分,其他不动。
一、先说winfrom的,比较简单
namespace WindowsFormsApp5
{
public partial class Form1 : Form
{
//这是三个已经创建好的form窗体
ChildForms.ChildAFrm frmA;
ChildForms.ChildBFrm frmB;
ChildForms.ChildCFrm frmC;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
//实例化三个窗体
frmA = new ChildForms.ChildAFrm();
frmB = new ChildForms.ChildBFrm();
frmC = new ChildForms.ChildCFrm();
}
private void btn_A_Click(object sender, EventArgs e)
{
showForm(frmA);
}
private void showForm(Form formName)
{
pnl_Frm.Controls.Clear(); // 清空原有的控件
formName.TopLevel = false; // 非顶级窗口
formName.FormBorderStyle = FormBorderStyle.None; // 不显示标题栏
formName.Dock = System.Windows.Forms.DockStyle.Fill; // 填充panel
this.pnl_Frm.Controls.Add(formName); // 添加w1窗体
formName.Show();
}
private void btn_B_Click(object sender, EventArgs e)
{
showForm(frmB);
}
private void btn_C_Click(object sender, EventArgs e)
{
showForm(frmC);
}
}
}
二、接着说wpf下,用在容器里显示不同窗体
首先要把子窗体变成控件UserControl,否则无法实现
xaml里的代码:
<DockPanel Name="Pnl_ShowMenu" Height="253" LastChildFill="False" Margin="792,76,67,0" VerticalAlignment="Top" Grid.ColumnSpan="2">
<ContentControl x:Name="Page_Change" HorizontalAlignment="Left" Height="253" Width="426" VerticalAlignment="Top" />
</DockPanel >
然后在button的点击事件里写:
子窗体 pew = new 子窗体();
Page_Change.Content = pew;