【问题标题】:Should I be using a Page, Window or UserControl我应该使用页面、窗口还是用户控件
【发布时间】:2011-06-28 20:54:38
【问题描述】:

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

我目前纠结于是否应该为每个仪表板、事件查看器、图表查看器等创建新的窗口、页面或用户控件。

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

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

谢谢

【问题讨论】:

    标签: wpf xaml


    【解决方案1】:

    窗口具有标题栏(包括最小/最大/关闭按钮等),可用于承载 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 属性告诉应用程序首先打开哪个窗口(您可以根据需要进行配置)

    如果您想在逻辑上将 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>
    

    其中HeaderUserControlMainSectionUserControl 是根据需要封装该窗口各个方面的用户控件。

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

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

    【讨论】:

    • 那么正确的实现应该是一个包含页面或用户控件的窗口。当用户在视图之间切换时,我会更改正在显示的页面/用户控件?
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 2019-02-16
      • 2012-08-25
      • 1970-01-01
      相关资源
      最近更新 更多