我正在开发一个新的桌面应用程序,它将具有多个视图,例如仪表板,事件查看器,图表查看器等等。基本上,用户将在这些视图之一之间切换,这将覆盖整个屏幕而不仅仅是其中的一部分。
我目前不知道是否要为每个仪表板,事件查看器,图表查看器等创建新的Window,Page或UserControl。
我已经做了一些阅读并理解,页面是为导航而构建的,这反过来让我保留了导航的历史记录,因此我可以返回/前进。但是,我认为我的桌面应用程序不需要该功能。
那么我可以使用UserControl还是Window?或者每个应用程序应该只有一个窗口吗?
由于
答案 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>
其中HeaderUserControl
和MainSectionUserControl
是UserControls,根据需要封装该窗口的各个方面。
如果您想要显示另一个窗口,您可以在代码中,在要显示的新窗口的实例上调用Show
或ShowDialog
...
此外 - 是的,Page是WPF浏览器应用程序的一部分,旨在在Internet Explorer中查看。
答案 1 :(得分:9)
您可以在浏览器中使用页面,而不是独立应用程序。
Window类表示顶级对象,也就是说,它不包含在另一个控件中。您在使用Windows操作系统时看到的所有窗口(如果它们是WPF应用程序)都是通过派生自Window类创建的,您可以使用Window类创建自己的窗口。
UserControl类允许您创建新的自定义控件,以防您的标准控件尚不存在。 UserControl可以包含在窗口或其他控件中,但是窗口不包含在任何内容中(这是最大的区别!)