현재 데스크톱 응용 프로그램을 작성하고 있지만 다른 사람을 응용 프로그램의 새 섹션으로 리디렉션 할 때 무엇을 사용해야하는지 알 수 없습니다.
내 옵션은
- 창문
- 페이지
- UserControl
그러나 나는 그들 사이의 차이점과 각각을 사용해야하는 시점을 이해하지 못합니다.
누군가 나에게 차이점을 설명하고 각각의 상황 / 응용 프로그램에 대한 예를 들어 줄 수 있습니까?
답변
창 새로운 자사의 : 오브젝트는 같은 소리 것입니다 Window
응용 프로그램에 대한. 완전히 새로운 윈도우를 팝업하고 싶을 때 사용해야합니다. Window
사용자 작업에 따라 변경되는 동적 내용을 기본 창에 배치하는 것을 선호하기 때문에 WPF에서 둘 이상을 자주 사용하지 않습니다 .
페이지는 당신의 창 내부 페이지입니다. XBAP와 같은 웹 기반 시스템에 주로 사용되며, 단일 브라우저 창이 있고 해당 창에서 다른 페이지를 호스팅 할 수 있습니다. 또한 sellmeadog 과 같은 내비게이션 애플리케이션 에서도 사용할 수 있다고 말했다 .
UserControl을은 당신이 당신의 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>
탐색 이벤트에서 다음을 사용하여 간단히 설정할 수 있습니다.
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>
답변
- 창 은 마치
Windows.Forms.Form
새 창과 같습니다. -
온라인 문서 에 따르면 페이지 는 다음과 같습니다.
Windows Internet Explorer, NavigationWindow 및 Frame으로 탐색하고 호스트 할 수있는 콘텐츠 페이지를 캡슐화합니다.
HTML 콘텐츠를 시각화 할 때는 기본적으로 이것을 사용합니다.
-
UserControl 은 재사용 가능한 구성 요소 (독립형 구성 요소는 아님)를 여러 개의 다른 구성 요소에서 사용하려는 경우를위한 것입니다
Windows
답변
모두 빌드하려는 앱에 따라 다릅니다. Window
대화 상자 기반 앱을 빌드하는 경우 s를 사용하십시오 . 탐색 기반 앱을Page
빌드하는 경우을 사용하십시오 . UserControl
s는 Windows와 Pages에서 모두 사용할 수 있으므로 방향에 관계없이 유용합니다.
탐험을 시작하기에 좋은 곳은 다음과 같습니다. http://windowsclient.net/learn
답변
우리는 일반적으로 Window
응용 프로그램에 One Main 을 사용하고 보이지 않는 XAML에서 팝업 컨트롤을 사용하는 대신 디자인 타임에 볼 수있는 창을 사용할 수 있으므로 팝업이 필요할 때와 같은 상황에서 다른 창을 사용할 수 있습니다. 함께 일하다
반면에 우리는 우리가 사용할 수있는 기본 창에서 주문 화면 등을 사용자 관리 화면처럼 한 스크린에서 다른 스크린으로 탐색에 많은 페이지를 사용하여 Frame
XAML 아래와 같이 탐색 컨트롤을
<Frame Name="mainWinFrame" NavigationUIVisibility="Hidden" ButtonBase.Click="mainWinFrame_Click">
</Frame>
씨#
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");
}
}
그렇게하는 한 가지 방법입니다. 새 페이지 검사를 추가하는 동안 Fram 대신 Tab 컨트롤을 사용하고 Dictionary를 사용하여 페이지에 페이지를 추가 할 수도 있습니다. 누군가를 도울 수 있기를 바랍니다.
답변
무엇보다도 정답을 게시했습니다. 몇 가지 링크를 추가하여 링크를 참조하고 이에 대한 명확하고 더 나은 아이디어를 얻을 수 있도록합니다.
UserControl :
http://msdn.microsoft.com/en-IN/library/a6h7e207(v=vs.71).aspx
WPF와 관련하여 페이지와 창의 차이점 : WPF의
페이지 대 창?