将窗口内容加载到父窗口中的面板中

时间:2014-08-15 23:17:23

标签: c# wpf

我想要一个父窗口,其中包含" next"和"返回"按钮。在父窗口中,我想显示子窗口的内容。如果"下一个"按下按钮,应隐藏子窗口,并显示另一个子窗口的内容。子窗口不应显示Frame.This是在Windows安装程序中实现具有不同步骤的UI。

将所有子窗口实现为隐藏并显示在一个窗口中的堆栈面板似乎不是最佳的,因为XAML代码文件会变得非常大。还会有很多冗余。

我无法找到解决方案,因为我不知道要搜索的术语。

2 个答案:

答案 0 :(得分:0)

我让它像这样工作,虽然我不确定它是否是最佳方式。

主窗口xaml:          

    <DockPanel>
        <StackPanel Width="300" Height="200" Name="ParentPanel" DockPanel.Dock="Top">

        </StackPanel>

        <StackPanel DockPanel.Dock="Bottom">
            <StackPanel Orientation="Horizontal">
                <Button>Back</Button>
                <Button>Next</Button>
            </StackPanel>
        </StackPanel>
    </DockPanel>

</Grid>

子窗口xaml:

<Window x:Class="ParentChildWindow.Child"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Child" Height="300" Width="300">
<Grid>
    <StackPanel Name="ChildPanel">
        <TextBox Text="This is a Child Window"></TextBox>
    </StackPanel>

</Grid>

父窗口代码:

 public MainWindow()
    {
        InitializeComponent();


        Child child = new Child();

        String xamlChildPanel = XamlWriter.Save(child.ChildPanel);
        StackPanel ChildPanel = (StackPanel)XamlReader.Parse(xamlChildPanel);

        ParentPanel.Children.Add( ChildPanel );
    }

答案 1 :(得分:0)

看起来Mark Hall是对的,UserControl是更好的方法:) 它很奇怪,它被称为&#34; UserControl&#34;,我真的不想将它用于&#34;控制&#34;。

用户控件:

<UserControl x:Class="UserControlProject.UCChildWindowContent"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="271" d:DesignWidth="300">
<Grid>
    <StackPanel>
        <TextBox Text="This is a child Window"></TextBox>
    </StackPanel>
</Grid>

主窗口:

<Window x:Class="UserControlProject.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <DockPanel>
        <StackPanel Width="200" Height="200" DockPanel.Dock="Top" Name="ParentPanel">
        </StackPanel>

        <StackPanel Orientation="Horizontal" DockPanel.Dock="Bottom">
            <Button>Previous</Button>
            <Button>Next</Button>
        </StackPanel>

    </DockPanel>
</Grid>

代码主窗口:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        UCChildWindowContent ucChild = new UCChildWindowContent();

        ParentPanel.Children.Add(ucChild);
    }
}