IT

WPF 탐색을 위한 Window vs Page vs UserControl?

itgroup 2023. 5. 8. 22:06
반응형

WPF 탐색을 위한 Window vs Page vs UserControl?

현재 데스크톱 응용프로그램을 작성하고 있지만 다른 사용자를 응용프로그램의 새 섹션으로 리디렉션할 때 무엇을 사용해야 하는지 이해할 수 없습니다.

내 옵션은 다음과 같습니다.

  • 페이지입니다.
  • 사용자 제어

하지만 저는 그것들 사이의 차이점이 무엇인지, 그리고 언제 각각을 사용해야 하는지 이해할 수 없습니다.

다른 점을 설명해 주시고, 각각의 상황/응용 프로그램을 사용할 수 있는 예를 들어 주시겠습니까?

Window 개체는 소리 그대로입니다. 새 개체입니다.Window당신의 신청을 위하여.완전히 새로운 창을 띄우려면 이 창을 사용해야 합니다.하나 이상을 자주 사용하지 않습니다.WindowWPF에서는 사용자 작업에 따라 변경되는 동적 콘텐츠를 메인 창에 넣는 것을 선호하기 때문입니다.

페이지는 창 안에 있는 페이지입니다.대부분 XBAP와 같은 웹 기반 시스템에 사용되며, 단일 브라우저 창이 있고 다른 페이지를 해당 창에서 호스팅할 수 있습니다.sellmedog가 말한 것처럼 내비게이션 애플리케이션에서도 사용할 수 있습니다.

사용자 컨트롤은 다른 컨트롤을 추가할 때와 동일한 방법으로 UI에 추가할 수 있는 재사용 가능한 사용자 생성 컨트롤입니다.일반적으로 나는 다음을 만듭니다.UserControl사용자 지정 기능(예: a)을 구축하려는 경우CalendarControl) 또는 관련 XAML 코드가 많은 경우, 예를 들어ViewMVVM 설계 패턴을 사용하는 경우.

창 사이를 이동할 때 새 창을 만들기만 하면 됩니다.Window이의를 제기하고 그것을 보여줍니다.

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

하지만 제가 이 답변의 처음에 말했듯이, 저는 가능하면 여러 개의 창을 관리하지 않는 것을 선호합니다.

내가 선호하는 탐색 방법은 를 사용하여 동적 컨텐츠 영역을 만들고 이 영역을 로 채우는 것입니다.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>

스크린샷1 스크린샷2

  • 창은 다음과 같습니다.Windows.Forms.Form그래서 그냥 새로운 창문.
  • 온라인 설명서에 따르면 페이지는 다음과 같습니다.

    Windows Internet Explorer(윈도우 인터넷 익스플로러), 탐색 창 및 프레임에서 탐색 및 호스팅할 수 있는 콘텐츠 페이지를 캡슐화합니다.

    그래서 HTML 콘텐츠를 시각화할 때 기본적으로 사용합니다.

  • UserControl은 재사용 가능한 구성 요소(독립 실행형 구성 요소는 아님)를 만들어 여러 가지로 사용하려는 경우에 사용됩니다.Windows

모든 것은 당신이 구축하려는 앱에 달려 있습니다.사용하다Window대화 기반 앱을 구축하는 경우.사용하다Page탐색 기반 앱을 구축하는 경우. UserControlPages 할 수 합니다.

탐색을 시작하기에 좋은 장소는 http://windowsclient.net/learn 입니다.

우리는 보통 하나의 메인을 사용합니다.Window에서 응용 및 할 수 . 않는 작업할 수 때문입니다. 왜냐하면 보이지 않는 XAML의 팝업 컨트롤을 사용하는 대신 설계 시에 보이는 창을 사용하여 작업하기 쉽기 때문입니다.

는 사용자 등 한 화면으로 합니다. 는 반에우사리화주등문같면다서과면른화에다면면이사으로니위합용하기동를많지페해이은화이한면는화서용에리자관▁use▁on▁can▁to▁window▁we다를 사용할 수 있습니다. 우리가 사용할 수 있는 메인 창에서.Frame XAMLXAML 파일은 다음과 .

    <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");
        }
    }

그것이 한 가지 방법입니다. 또한 새 페이지 확인을 추가하는 동안 사전을 사용하여 프레임 대신 탭 컨트롤을 사용하고 페이지를 추가할 수 있습니다. 그렇지 않으면 추가 및 탐색만 수행합니다.그게 누군가에게 도움이 되길 바랍니다.

무엇보다도 정답을 게시했습니다.저는 당신이 그것들을 참조하고 동일한 것에 대해 명확하고 더 나은 아이디어를 가질 수 있도록 몇 개의 링크를 추가하고 싶습니다.

사용자 제어: http://msdn.microsoft.com/en-IN/library/a6h7e207(v=vs.71).aspx

WPF와 관련된 페이지와 창의 차이: WPF의 페이지와 창?

언급URL : https://stackoverflow.com/questions/12206120/window-vs-page-vs-usercontrol-for-wpf-navigation

반응형