我应该使用页面、窗口还是用户控件?

30

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

目前,我遇到了困难,无法确定每个仪表板、事件查看器、图表查看器等是否应该创建一个新的 Window、Page 还是 UserControl。

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

那么,我可以使用 UserControl 或 Window 吗?还是说应用程序中只能有一个 Window?

谢谢

2个回答

37
一个窗口有标题栏(包括最小化/最大化/关闭按钮等),可以用来承载 XAML 元素,例如用户控件。
当然,你并不一定要在应用程序中只使用一个窗口,但有些应用程序会选择这种模式(一个窗口,承载多个用户控件)。
当你创建一个新的 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属性告诉应用程序首先打开哪个窗口(如果您希望可以进行配置)。

如果您想要将窗口逻辑上分割成多个部分,并且不希望在一个文件中使用过多的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方法...

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


那么正确的实现方式是一个窗口包含一个页面或用户控件。当用户在视图之间切换时,我会更改正在显示的页面/用户控件吗? - n00b

9

页面是在浏览器中使用的,而不是用于独立应用程序。

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

UserControl类允许您创建新的自定义控件,以防没有已经存在的标准控件满足您的需求。UserControl可以包含在窗口或其他控件中,但Window不包含在任何东西中(这是一个重要区别!)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接