Um objeto Window é exatamente o que parece: é um novo Window
para o seu aplicativo. Você deve usá-lo quando desejar abrir uma janela totalmente nova. Geralmente não uso mais de um Window
no WPF porque prefiro colocar conteúdo dinâmico na minha janela principal que muda com base na ação do usuário.
Uma página é uma página dentro da sua janela. É usado principalmente para sistemas baseados na Web como um XBAP, onde você tem uma única janela do navegador e páginas diferentes podem ser hospedadas nessa janela. Também pode ser usado em aplicativos de navegação, como o sellmeadog disse .
Um UserControl é um controle reutilizável criado pelo usuário que você pode adicionar à sua interface do usuário da mesma maneira que adicionaria qualquer outro controle. Geralmente, eu crio um UserControl
quando quero criar alguma funcionalidade personalizada (por exemplo, a CalendarControl
) ou quando tenho uma grande quantidade de código XAML relacionado, como um View
ao usar o padrão de design MVVM.
Ao navegar entre janelas, você pode simplesmente criar um novo Window
objeto e mostrá-lo
var NewWindow = new MyWindow();
newWindow.Show();
mas como eu disse no começo desta resposta, prefiro não gerenciar várias janelas, se possível.
Meu método preferido de navegação é criar uma área de conteúdo dinâmico usando a ContentControl
e preenchê-la com uma que UserControl
contenha a visualização atual.
<Window x:Class="MyNamespace.MainWindow" ...>
<DockPanel>
<ContentControl x:Name="ContentArea" />
</DockPanel>
</Window>
e no seu evento de navegação, você pode simplesmente configurá-lo usando
ContentArea.Content = new MyUserControl();
Mas se você estiver trabalhando com o WPF, recomendo o padrão de design do MVVM. Eu tenho um exemplo muito básico no meu blog que ilustra como você navegaria usando o MVVM, usando este padrão:
<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>
AuditViewModel
contendo todos os dados e funcionalidade para a forma, e eu desenhá-lo usando umAuditView
UserControl, ou apenas umDataTemplate
ViewModel
é normalmente construído para oView
, enquanto oModels
são os objetos de dados e classes ( "blocos de construção") utilizados pelo seu aplicativo (ViewModels
)TabControl.ItemsSource
a uma coleção de objetos e uso DataTemplates para informar ao WPF como desenhar cada tipo de objeto em cada guia. Geralmente algo parecido com istoWindows.Forms.Form
, então apenas uma nova janelaA página é, de acordo com a documentação online :
Então você basicamente usa isso se visualizar algum conteúdo HTML
O UserControl é para casos em que você deseja criar algum componente reutilizável (mas não autônomo) para usá-lo em vários
Windows
fonte
UserControl
no caso de você achar que o mesmo conjunto de controles que você usará nesta janela, você também usará em outro, então, em vez de escrever código duplo, basta criar umUserControl
, mas se não, basta colocar controles para visualização de seus dados porWindow
si só, no lado direito dos botões que você mencionou.DataTemplates
. Eles são usados quando você deseja informar ao WPF como desenhar um item dentro de um escopo específico. Por exemplo, se você quiser desenharButtons
círculos redondos, basta usar a emDataTemplate
vez de aUserControl
. Geralmente usoUserControls
quando quero um novo controle com sua própria funcionalidade ou quando tenho muito XAML para um único componente, como para aView
. Para pedaços menores de XAML que não exigem qualquer funcionalidade especial, você deve usar umaDataTemplate
vez de criar umUserControl
Page
não é HTML, mas XAML. No entanto, aPage
está vinculado à estrutura de navegação que é conceitualmente semelhante à maneira como a navegação é feita em um navegador da web. (E as páginas podem até ser hospedadas em um navegador se o aplicativo for um aplicativo XBAP).Tudo depende do aplicativo que você está tentando criar. Use
Window
s se você estiver criando um aplicativo baseado em diálogo. UsePage
s se você estiver criando um aplicativo baseado em navegação .UserControl
s será útil independentemente da direção que você seguir, pois poderá usá-los no Windows e no Pages.Um bom lugar para começar a explorar é aqui: http://windowsclient.net/learn
fonte
Geralmente usamos o One Main
Window
para o aplicativo e outras janelas podem ser usadas em situações como quando você precisa de pop-ups porque, em vez de usar controles pop-up em XAML que não são visíveis, podemos usar uma janela que é visível no tempo de design, para que seja fácil trabalhar compor outro lado, usamos muitas páginas para navegar de uma tela para outra, como a tela de gerenciamento de usuários, para a tela de pedidos, etc. Na janela principal, podemos usar o
Frame
controle da navegação, como abaixo de XAMLC #
Essa é uma maneira de fazer isso Também podemos usar um controle Tab em vez de Fram e adicionar páginas a ele usando um dicionário enquanto adicionamos uma nova verificação de página, se o controle já existir, apenas navegue, caso contrário, adicione e navegue. Espero que ajude alguém
fonte
Acima de tudo, postou a resposta correta. Gostaria de adicionar alguns links, para que você possa consultá-los e ter idéias claras e melhores sobre o mesmo:
UserControl: http://msdn.microsoft.com/en-IN/library/a6h7e207(v=vs.71).aspx
A diferença entre página e janela em relação ao WPF: Página vs janela no WPF?
fonte