SORU
30 AĞUSTOS 2012, PERŞEMBE


Pencere Sayfa vs vs WPF için navigasyon UserControl?

Eğer biri bana yardımcı olabilir merak ediyordum. WPF yeniyim ve şu anda masaüstü bir uygulama yazıyorum, ama uygulamanın yeni bir bölüme yönlendirerek zaman kullanmak için ne etrafında başımı almak için görünmüyor.

Benim seçenek gibi görünüyor

  • Pencere
  • Sayfa
  • UserControl

ama aralarındaki fark nedir, ve her birini kullanmam gerektiğini anlamam.

Biri benim için farkları açıklayabilir ve her biri için kullanabilirsiniz bir örnek ver?

CEVAP
31 AĞUSTOS 2012, Cuma


BirPencerenesne gibi sesler sadece budur: uygulamanız için. Window yeni Tamamen yeni bir pencere açılır istediğiniz zaman kullanmanız gerekir. Değişiklikleri genellikle kullanıcı eylemi dayalı bu benim ana Penceresinde dinamik içerik koymayı tercih ederim çünkü WPF 5 ** birden fazla kullanmıyorum.

BirSayfabir sayfa içinde Pencere. Çoğunlukla web tabanlı tek bir tarayıcı olduğu bir XBAP, gibi sistemleri pencere ve farklı sayfaları penceresinde barındırılabilir için kullanılır. Ayrıca sellmeadog said Navigation Applications kullanılabilir.

BirUserControlbir yeniden kullanılabilir kullanıcı tarafından oluşturulan UI için başka bir kontrol eklersiniz aynı şekilde ekleyebileceğiniz bir kontrol. Genellikle ben oluşturmak UserControl ne zaman istersem inşa bazı özel işlevler (örneğin, bir CalendarControl), ya da ben büyük bir miktarı ile ilgili XAML kod, gibi bir View kullanırken MVVM tasarım deseni.

Pencereler arasında gezinirken, sadece Window yeni bir nesne oluşturur ve bu gösterebilirsin

var NewWindow = new MyWindow();
newWindow.Show();

ama bu cevap başında dediğim gibi, mümkünse birden fazla windows yönetmek için değil tercih ederim.

Navigasyon benim tercih edilen yöntem, bazı dinamik içerik alanı ContentControl oluşturun ve geçerli görünümü ne olursa olsun UserControl içeren ile doldurmak için.

<Window x:Class="MyNamespace.MainWindow" ...>
    <DockPanel>
        <ContentControl x:Name="ContentArea" />
    </DockPanel>
</Window>

ve olay gezinmek senin sadece bunu kullanarak ayarlayabilirsiniz

ContentArea.Content = new MyUserControl();

Ama eğer WPF ile çalışıyorsanız, son derece MVVM tasarım deseni öneririm. MVVM kullanarak, bu modeli kullanarak gezinmek istiyorum verilmektedir basic example on my blog bir çok var:

<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>

Screenshot1 Screenshot2

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • guillaume2111's channel

    guillaume211

    19 Kasım 2006
  • newreleaseblitz

    newreleasebl

    13 Ocak 2010
  • TotalxLuna

    TotalxLuna

    27 Kasım 2011