我应该使用Page,Window还是UserControl

n00*_*00b 27 wpf xaml

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

我目前仍然坚持要为每个仪表板,事件查看器,图表查看器等创建一个新的Window,Page或UserControl.

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

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

谢谢

kiw*_*pom 35

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

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

当您创建新的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>
Run Code Online (Sandbox Code Playgroud)

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

如果您希望在逻辑上将Window分成多个部分,并且不希望在一个文件中使用太多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>
Run Code Online (Sandbox Code Playgroud)

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

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

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


Ken*_*nde 9

页面是您在浏览器中使用的内容,而不是独立应用程序.

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

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