Actualmente estoy escribiendo una aplicación de escritorio, pero yo no puedo conseguir mi cabeza alrededor de lo que para el uso al redirigir a alguien a una nueva sección de la aplicación.

Mis opciones parecen ser

  • Ventana
  • Página
  • UserControl

pero no entiendo cuál es la diferencia entre ellos es, y cuándo debo usar cada uno de ellos.

Podría alguien explicar las diferencias para mí, y dar un ejemplo de qué situaciones y/o aplicaciones que puede utilizar cada uno?

InformationsquelleAutor Steve | 2012-08-30

5 Comentarios

  1. 326

    Un Ventana objeto es exactamente lo que parece: se trata de un nuevo Window para su aplicación. Se debe utilizar cuando se desea pop una enteramente nueva ventana. Yo no suelo utilizar más de una Window en WPF porque prefiero poner el contenido dinámico en mi Ventana principal de que los cambios en función de la acción del usuario.

    Un Página es una página dentro de su Ventana. Se utiliza sobre todo para los sistemas basados en la web como una XBAP, donde se tiene una sola ventana del navegador y diferentes páginas pueden ser alojados en esa ventana. También puede ser utilizado en Las Aplicaciones De Navegación como sellmeadog dijo.

    Un UserControl es reutilizable por el usuario creado control que se puede agregar a la interfaz de usuario de la misma manera que te gustaría añadir cualquier otro control. Por lo general, crear un UserControl cuando quiero construir en algunas funciones personalizadas (por ejemplo, un CalendarControl), o cuando tengo una gran cantidad de relacionados con el código XAML, como un View cuando se utiliza el patrón de diseño MVVM.

    Cuando la navegación entre ventanas, usted puede simplemente crear un nuevo Window objeto y mostrar

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

    pero como he dicho al principio de esta respuesta, prefiero no gestionar varias ventanas si es posible.

    Mi método preferido de navegación es crear algún contenido dinámico utilizando un ContentControl, y rellenar con una UserControl que contengan cualquiera que sea el punto de vista actual es.

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

    y en su navegar caso de que usted simplemente puede establecer utilizando la

    ContentArea.Content = new MyUserControl();

    Pero si estás trabajando con WPF, me gustaría recomendar encarecidamente el patrón de diseño MVVM. Tengo una muy ejemplo básico en mi blog que ilustra cómo te gustaría navegar usando MVVM, el uso de este patrón:

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

    Ventana vs Página vs UserControl para WPF de navegación?
    Ventana vs Página vs UserControl para WPF de navegación?

    • Tengo una pregunta, MVVM de lo que puedo decir, parece que funciona bien con conjuntos de datos, pero ¿qué acerca de las formas estáticas, como por ejemplo un formulario de entrada para una auditoría. Debo ser el uso de una página o control de usuario para las páginas estáticas?
    • Si quería hacer un formulario de Auditoría usando MVVM, me gustaría tener un AuditViewModel que contiene todos los datos y la funcionalidad para el formulario, y me gustaría dibujar usando un AuditView UserControl, o simplemente un DataTemplate
    • Gracias! En realidad, Después de pasar por su blog y algunos otros sitios, tengo una mejor comprensión de cómo MVVM obras.
    • pregunta si no mente. Me preguntaba sobre mi aproximación a esta tarea. Tengo un formulario básico clase con una estructura que puedo mapa a mi SQL. Y mi idea original era tener varias clases hijas que básicamente la interfaz genérica de los campos con los datos específicos, por ejemplo _Alpha101 podría ser el Nombre en un formulario, pero la Descripción en otro. La idea original sólo tenía estos tratados como objetos, pero creo que podría ser capaz de hacer un modelo MVVM. Mi pensamiento es para mantener la forma básica como el modelo, pero de ahí a hacer de las formas Específicas como el ViewModel?
    • La específica ViewModel propiedades se convertiría entonces en las asignaciones a los campos genéricos de la modelo. Es decir: _Firstname {Get{return _Alpha101} set{_Alpha101 = valor}}? y, a continuación, el viewmodel también sería responsable de procesar el modelo de actualizar o agregar a sql? gracias!
    • El ViewModel es normalmente construido para la View, mientras que el Models son los objetos de datos y las clases («bloques de construcción») utilizados por la aplicación (ViewModels)
    • «windowsclient.net/learn/video.aspx?v=4190» es «muerta». Navega a un común empezar con .Net página.
    • ¿crees que es también una buena idea utilizar este control de usuario-modo de control TabControl? Así, para cada ficha de un control de usuario es asignado. ¿Que sentido?
    • Sí lo hago con frecuencia. Que obligar a la TabControl.ItemsSource a una colección de objetos, y el uso DataTemplates decir WPF cómo dibujar cada tipo de objeto en cada ficha. Normalmente es algo como este

  2. 13
    • Ventana es como Windows.Forms.Form, por lo que sólo una nueva ventana
    • Página es, según la documentación en línea:

      Encapsula una página de contenido que se puede navegar a
      y hospedado en Windows Internet Explorer, NavigationWindow, y el Marco.

      Así que, básicamente, el uso de este si se va a visualizar algunos contenidos HTML

    • UserControl es para los casos cuando se desea crear algunos componentes reutilizables (pero no independiente) para utilizar en múltiples diferentes Windows

    • Gracias por tu respuesta. Así, por ejemplo, si está creando una aplicación que tenía los botones de la izquierda, pero que quería ver el contenido en el interior de estos botones en el lado derecho, usted podría usar un control de usuario?
    • uso UserControl en caso de que usted piensa que el mismo conjunto de controles que se va a utilizar en esta ventana usted podrá utilizar en algunos otros también, así que en lugar de escribir el doble código, sólo tienes que crear una UserControl, pero si no, sólo hay que poner controles para la visualización de los datos en el Window sí mismo, en el lado derecho de los botones que mantioned.
    • Hay un elemento más que creo que debería ser añadido: DataTemplates. Estos se usan cuando quieres decirle a WPF cómo dibujar un elemento dentro de un ámbito específico. Por ejemplo, si usted quería llamar su Buttons ser redondo círculos, usted podría simplemente utilizar un DataTemplate en lugar de un UserControl. Yo normalmente uso UserControls cuando quiero un nuevo control con su propia funcionalidad, o cuando tengo un montón de XAML para un único componente, tal como un View. Para los pequeños trozos de código XAML que no requieren ninguna funcionalidad especial, usted debe utilizar un DataTemplate en lugar de crear un UserControl
    • En general el contenido de un Page no es HTML pero XAML. Sin embargo, un Page es atado en el marco de navegación que es conceptualmente similar a la forma de navegación que se realiza en un navegador web. (Y las páginas que incluso puede estar hospedado en un navegador si la aplicación es una aplicación XBAP.)
  3. 6

    Todo depende de la aplicación que estamos tratando de construir. Uso Windows si usted está construyendo un diálogo en función de la aplicación. Uso Pages si usted está construyendo un la navegación basada en la aplicación. UserControls será útil, independientemente de la dirección en la que ir como usted las puede utilizar tanto en Windows como en las Páginas.

    Un buen lugar para empezar a explorar está aquí: http://windowsclient.net/learn

  4. 3

    Normalmente se utiliza Uno de los Principales Window para la aplicación y otros de windows pueden ser utilizadas en situaciones como cuando se necesitan ventanas emergentes, porque en lugar de utilizar emergente controles XAML que no son visibles podemos utilizar una Ventana en la que es visible en tiempo de diseño, de manera que será más fácil trabajar con los

    por otro lado utilizamos muchas páginas para desplazarse de una pantalla a otra como Usuario de la pantalla de gestión a Fin de Pantalla etc En la Ventana principal podemos utilizar Frame de control para la navegación, como el de abajo
    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");
            }
        }

    Que es una manera de hacerlo también podemos utilizar un Control de Ficha en lugar de Fram y Agregar páginas a que el uso de un Diccionario, mientras que la adición de la nueva página de verificación si el control ya existe, entonces sólo navegar de otra manera de agregar y navegar. Espero que ayude a alguien

Dejar respuesta

Please enter your comment!
Please enter your name here