回答:
ウィンドウの新しい:オブジェクトは、それはのように聞こえるだけで何ですWindow
、あなたのアプリケーションのために。まったく新しいウィンドウをポップアップする場合に使用します。Window
ユーザーの操作に基づいて変化する動的なコンテンツをメインウィンドウに配置したいので、WPFで複数を使用することはあまりありません。
A ページは、あなたのウィンドウ内のページです。これは主に、XBAPなどのWebベースのシステムで使用されます。このシステムでは、単一のブラウザーウィンドウがあり、そのウィンドウでさまざまなページをホストできます。また、sellmeadogのようなナビゲーションアプリケーションでも使用できます。
A ユーザーコントロールは、あなたのUIにあなたが他のコントロールを追加するのと同じ方法を追加することができ、再利用可能なユーザーが作成したコントロールです。通常UserControl
、いくつかのカスタム機能(たとえばCalendarControl
)を組み込みたい場合、またはView
MVVM設計パターンを使用する場合など、関連するXAMLコードが大量にある場合に、を作成します。
ウィンドウ間を移動するときに、新しいWindow
オブジェクトを作成して表示するだけです
var NewWindow = new MyWindow();
newWindow.Show();
しかし、この回答の冒頭で述べたように、可能であれば複数のウィンドウを管理しない方がよいでしょう。
私が推奨するナビゲーション方法は、を使用して動的コンテンツ領域を作成しContentControl
、それにUserControl
現在のビューが何であれを含むを設定することです。
<Window x:Class="MyNamespace.MainWindow" ...>
<DockPanel>
<ContentControl x:Name="ContentArea" />
</DockPanel>
</Window>
そしてあなたのnavigateイベントではあなたはそれを使ってそれを設定する
ContentArea.Content = new MyUserControl();
ただし、WPFを使用している場合は、MVVM設計パターンを強くお勧めします。私のブログには、このパターンを使用してMVVMを使用してナビゲートする方法を示す非常に基本的な例があります。
<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
すべてのデータと機能を含むを作成し、AuditView
UserControlまたは単にDataTemplate
ViewModel
通常のために構築されてView
いる間、Models
データオブジェクトとクラス(「ビルディングブロック」)は、アプリケーション(で使用されているViewModels
)
Windows.Forms.Form
ので、新しいウィンドウオンラインドキュメントによると、ページは:
Windows Internet Explorer、NavigationWindow、およびFrameに移動してホストできるコンテンツのページをカプセル化します。
したがって、HTMLコンテンツを視覚化する場合は、基本的にこれを使用します
UserControlは、再利用可能なコンポーネント(スタンドアロンコンポーネントではない)を作成して複数の異なるコンポーネントで使用する場合に使用します。Windows
UserControl
このウィンドウで使用するのと同じコントロールセットを他のコントロールでも使用するUserControl
場合は、二重のコードを記述する代わりにを作成しますが、そうでない場合は、視覚化するためのコントロールを配置します。データWindow
自体、つまり、ボタンの右側にあります。
DataTemplates
。これらは、特定のスコープ内でアイテムを描画する方法をWPFに伝えたい場合に使用されます。たとえば、Buttons
丸い円になるように描画したい場合は、のDataTemplate
代わりにを使用できますUserControl
。私は通常UserControls
、独自の機能を持つ新しいコントロールが必要な場合、またはのように単一のコンポーネントに多くのXAMLがある場合に使用しView
ます。特別な機能を必要としない小さなXAMLの場合、DataTemplate
作成する代わりにを使用する必要がありますUserControl
Page
HTMLではなくXAMLです。ただし、Page
はナビゲーションフレームワークに関連付けられており、Webブラウザでナビゲーションを行う方法と概念的に似ています。(アプリケーションがXBAPアプリケーションの場合、ページをブラウザーでホストすることもできます。)
すべては、構築しようとしているアプリに依存します。Window
ダイアログベースのアプリを構築する場合は、sを使用します。ナビゲーションベースのアプリをPage
構築する場合は、sを使用します。sは、WindowsとPagesの両方で使用できるので、方向に関係なく便利です。UserControl
探索を始めるのに適した場所はこちらです:http : //windowsclient.net/learn
通常Window
、アプリケーションにはOne Main を使用し、ポップアップが必要な場合などの状況では他のウィンドウを使用できます。XAMLで表示されないポップアップコントロールを使用する代わりに、設計時に表示されるウィンドウを使用して簡単にできるためです。一緒に働く
一方、ユーザー管理画面から注文画面などのように、1つの画面から別の画面に移動するために多くのページを使用しますメインウィンドウではFrame
、以下のXAMLのようなナビゲーションのコントロールを使用できます
<Frame Name="mainWinFrame" NavigationUIVisibility="Hidden" ButtonBase.Click="mainWinFrame_Click">
</Frame>
C#
private void mainWinFrame_Click(object sender, RoutedEventArgs e)
{
try
{
if (e.OriginalSource is Button)
{
Button btn = (Button)e.OriginalSource;
if ((btn.CommandParameter != null) && (btn.CommandParameter.Equals("Order")))
{
mainWinFrame.Navigate(OrderPage);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message, "Error");
}
}
これはその方法の1つです。Framの代わりにタブコントロールを使用し、辞書を使用してページに追加することもできます。新しいページを追加するときに、コントロールが既に存在するかどうかを確認し、それ以外の場合はナビゲートし、それ以外の場合は追加してナビゲートするだけです。それが誰かを助けることを願っています