एक विंडो ऑब्जेक्ट बस ऐसा लगता है जैसे कि: यह Window
आपके एप्लिकेशन के लिए एक नया है । जब आप पूरी तरह से नई विंडो पॉप अप करना चाहते हैं तो आपको इसका उपयोग करना चाहिए। मैं अक्सर Window
WPF में एक से अधिक का उपयोग नहीं करता हूं क्योंकि मैं अपने मुख्य विंडो में गतिशील सामग्री डालना पसंद करता हूं जो उपयोगकर्ता की कार्रवाई के आधार पर बदलता है।
एक पृष्ठ आपके विंडो के अंदर एक पृष्ठ है। यह ज्यादातर XBAP जैसी वेब-आधारित प्रणालियों के लिए उपयोग किया जाता है, जहां आपके पास एक एकल ब्राउज़र विंडो होती है और उस विंडो में विभिन्न पृष्ठों को होस्ट किया जा सकता है। इसका उपयोग नेविगेशन अनुप्रयोगों में भी किया जा सकता है, जैसे कि sellmeadog ने कहा ।
एक UserControl एक पुन: प्रयोज्य उपयोगकर्ता-निर्मित नियंत्रण है जिसे आप अपने UI में उसी तरह जोड़ सकते हैं जैसे आप कोई अन्य नियंत्रण जोड़ते हैं। आमतौर पर UserControl
जब मैं कुछ कस्टम फंक्शनलिटी में निर्माण करना चाहता हूं (उदाहरण के लिए, ए CalendarControl
), या जब मेरे पास संबंधित एक्सएएमएल कोड की एक बड़ी मात्रा होती है, जैसे View
कि एमवीवीएम डिजाइन पैटर्न का उपयोग करते समय।
खिड़कियों के बीच नेविगेट करते समय, आप बस एक नई Window
वस्तु बना सकते हैं और इसे दिखा सकते हैं
var NewWindow = new MyWindow();
newWindow.Show();
लेकिन जैसा कि मैंने इस उत्तर की शुरुआत में कहा था, मैं संभव हो तो कई खिड़कियों का प्रबंधन नहीं करना पसंद करता हूं।
नेविगेशन का मेरा पसंदीदा तरीका कुछ गतिशील सामग्री क्षेत्र का उपयोग करके बनाना है ContentControl
, और इसे आबाद करना है UserControl
जिसमें वर्तमान दृश्य जो भी हो।
<Window x:Class="MyNamespace.MainWindow" ...>
<DockPanel>
<ContentControl x:Name="ContentArea" />
</DockPanel>
</Window>
और अपने नेविगेट इवेंट में आप बस इसका उपयोग करके सेट कर सकते हैं
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>