Một đối tượng Window đúng như tên của nó: nó là một Window
ứng dụng mới cho ứng dụng của bạn. Bạn nên sử dụng nó khi bạn muốn bật lên một cửa sổ hoàn toàn mới. Tôi không thường sử dụng nhiều hơn một Window
trong WPF vì tôi thích đưa nội dung động vào Cửa sổ chính thay đổi dựa trên hành động của người dùng.
Một trang là một trang bên trong cửa sổ của bạn. Nó chủ yếu được sử dụng cho các hệ thống dựa trên web như XBAP, nơi bạn có một cửa sổ trình duyệt duy nhất và các trang khác nhau có thể được lưu trữ trong cửa sổ đó. Nó cũng có thể được sử dụng trong Ứng dụng Điều hướng như sellmeadog nói .
Một UserControl là một điều khiển người dùng tạo tái sử dụng mà bạn có thể thêm vào giao diện người dùng của bạn giống như cách bạn sẽ thêm bất kỳ điều khiển khác. Thông thường tôi tạo một UserControl
khi tôi muốn xây dựng một số chức năng tùy chỉnh (ví dụ: a CalendarControl
) hoặc khi tôi có một lượng lớn mã XAML liên quan, chẳng hạn như View
khi sử dụng mẫu thiết kế MVVM.
Khi điều hướng giữa các cửa sổ, bạn chỉ cần tạo một Window
đối tượng mới và hiển thị nó
var NewWindow = new MyWindow();
newWindow.Show();
nhưng như tôi đã nói ở đầu câu trả lời này, tôi không muốn quản lý nhiều cửa sổ nếu có thể.
Phương pháp điều hướng ưa thích của tôi là tạo một số khu vực nội dung động bằng cách sử dụng ContentControl
và điền vào đó với UserControl
bất kỳ chế độ xem hiện tại nào.
<Window x:Class="MyNamespace.MainWindow" ...>
<DockPanel>
<ContentControl x:Name="ContentArea" />
</DockPanel>
</Window>
và trong sự kiện điều hướng của bạn, bạn có thể chỉ cần đặt nó bằng cách sử dụng
ContentArea.Content = new MyUserControl();
Nhưng nếu bạn đang làm việc với WPF, tôi rất khuyến nghị mẫu thiết kế MVVM. Tôi có một ví dụ rất cơ bản trên blog của mình minh họa cách bạn điều hướng bằng MVVM, sử dụng mẫu này:
<Window x:Class="SimpleMVVMExample.ApplicationView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:SimpleMVVMExample"
Title="Simple MVVM Example" Height="350" Width="525">
<Window.Resources>
<DataTemplate DataType="{x:Type local:HomeViewModel}">
<local:HomeView /> <!-- This is a UserControl -->
</DataTemplate>
<DataTemplate DataType="{x:Type local:ProductsViewModel}">
<local:ProductsView /> <!-- This is a UserControl -->
</DataTemplate>
</Window.Resources>
<DockPanel>
<!-- Navigation Buttons -->
<Border DockPanel.Dock="Left" BorderBrush="Black"
BorderThickness="0,0,1,0">
<ItemsControl ItemsSource="{Binding PageViewModels}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Content="{Binding Name}"
Command="{Binding DataContext.ChangePageCommand,
RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
CommandParameter="{Binding }"
Margin="2,5"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Border>
<!-- Content Area -->
<ContentControl Content="{Binding CurrentPageViewModel}" />
</DockPanel>
</Window>
