常常遇到在一個主界面,通過不同按鍵或者菜單,讓主顯示框加載不同窗口的功能,類似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;