我应该使用Page,Window还是UserControl

时间:2011-02-17 05:47:02

标签: wpf xaml

我正在开发一个新的桌面应用程序,它将具有多个视图,例如仪表板,事件查看器,图表查看器等等。基本上,用户将在这些视图之一之间切换,这将覆盖整个屏幕而不仅仅是其中的一部分。

我目前不知道是否要为每个仪表板,事件查看器,图表查看器等创建新的Window,Page或UserControl。

我已经做了一些阅读并理解,页面是为导航而构建的,这反过来让我保留了导航的历史记录,因此我可以返回/前进。但是,我认为我的桌面应用程序不需要该功能。

那么我可以使用UserControl还是Window?或者每个应用程序应该只有一个窗口吗?

由于

2 个答案:

答案 0 :(得分:35)

窗口包含标题栏(包括最小/最大/关闭按钮等),可用于托管XAML元素,例如用户控件。

您当然不限于每个应用程序使用一个窗口,但某些应用程序会选择该模式(一个窗口,托管各种UserControl)。

创建新的WPF应用程序时,默认情况下,您的应用程序已配置(在App.xaml中),如下所示:

<Application x:Class="WpfApplication1"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         StartupUri="MainWindow.xaml">
    <Application.Resources>

    </Application.Resources>
</Application>

StartupUri属性告诉应用首先打开哪个窗口(如果愿意,可以配置它)

如果您想将Windows逻辑分离成片段并且不希望在一个文件中使用太多XAML,则可以执行以下操作:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:WpfApplication1"
    Title="Window1" Height="300" Width="300">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="50" />
            <RowDefinition />
        </Grid.RowDefinitions>

        <local:HeaderUserControl Grid.Row="0" />
        <local:MainSectionUserControl Grid.Row="1" />
    </Grid>
</Window>

其中HeaderUserControlMainSectionUserControl是UserControls,根据需要封装该窗口的各个方面。

如果您想要显示另一个窗口,您可以在代码中,在要显示的新窗口的实例上调用ShowShowDialog ...

此外 - 是的,Page是WPF浏览器应用程序的一部分,旨在在Internet Explorer中查看。

答案 1 :(得分:9)

您可以在浏览器中使用页面,而不是独立应用程序。

Window类表示顶级对象,也就是说,它不包含在另一个控件中。您在使用Windows操作系统时看到的所有窗口(如果它们是WPF应用程序)都是通过派生自Window类创建的,您可以使用Window类创建自己的窗口。

UserControl类允许您创建新的自定义控件,以防您的标准控件尚不存在。 UserControl可以包含在窗口或其他控件中,但是窗口不包含在任何内容中(这是最大的区别!)