Del burn.Micro 中 的 WindowManager

Perfil ventana del Administrador

gestor de ventanas Caliburn Micro modelo de vista puede crear a través de la ventana, sólo tiene que pasar una instancia del modelo de vista al gestor de ventanas, gestor de ventanas encontrará automáticamente la vista correspondiente, y como un cuadro de diálogo o ventana se abre, antes de la apertura también puede Vista de atributos de configuración parcialmente dependientes.

Ventana del Administrador es muy importante en el CM, la aplicación crea una nueva ventana, utilice los cuadros de diálogo pop-up y otro gestor de ventanas es muy conveniente. Pero no es lo mismo en CM WindowManager implementadas en cada plataforma (WPF, Silverlight, Windows Phone, WinRT) es. Por lo tanto, quiero entender completamente un poco difícil, e incluso el documento oficial no dio más detalles. Por lo tanto, en aras de la simplicidad, este artículo sólo para WindowManager en WPF introducido.

WPF aplicación del administrador de ventanas

Para utilizar el gestor de ventanas, es necesario tener un objeto de gestor de ventanas. Por lo general, la práctica es configurar el COI en programa previo, crear un WindowManager e importados en el contenedor COI (ver artículos relacionados de configuración de programa previo antes de aprendizaje). Configuración de código COI puede ser tal (MEF en la presente memoria son ejemplares del recipiente como IOC):

  protected override void Configure()
  {
    container = new CompositionContainer(new AggregateCatalog(AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>()));
 
    CompositionBatch batch = new CompositionBatch(); 
    batch.AddExportedValue<IWindowManager>(new WindowManager());
    batch.AddExportedValue(container); 
    container.Compose(batch);
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

Entonces tenemos que extraer el objeto WindowManager WindowManager del modelo de vista. Específicamente, la siguiente:

[Export(typeof(ShellViewModel))]
public class ShellViewModel : PropertyChangedBase
{
private readonly IWindowManager _windowManager;
 
[ImportingConstructor]   //必须加入这个,这是因为用MEF在创建ShellViewModel实例时,有[ImportingConstructor]标记的构造函数的参数会自动使用容器内相应的export对象
public ShellViewModel(IWindowManager windowManager)
{
  _windowManager = windowManager;
}
  ...
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

WindowManager pero muy sencillo de utilizar, el siguiente código va a crear un nuevo ShellViewModel, y encontrar ShellView acuerdo con ShellViewModel, a continuación, mostrar la ventana ShellView, ShellViewModel se convertirá en DataContext ShellView de.

public void NewWindow()
{
   _windowManager.ShowWindow(new ShellViewModel(_windowManager));
}
  • 1
  • 2
  • 3
  • 4

Ventana del Administrador para abrir las ventanas, cuadros de diálogo y ventanas emergentes, sólo puede llamar a un enfoque diferente puede ser. Puede Caliburn Micro viene HelloWindowManager ejemplo, para ver más el uso del gestor de ventanas WindowManager.

WindowManager de parámetros de ajuste

Cuando WindowManager crear una ventana, puede pasar parámetros a las propiedades de la nueva ventana. Esto mejor que pueda de acuerdo a sus necesidades, un mayor control sobre su aplicación. Puede referirse a la siguiente ejemplo:

public void NewWindow()
{
     var settings = new Dictionary<string, object> { { "Topmost", true }, { "Owner", GetView() } };
     //Owner不是依赖属性不能绑定,但在这里设置是可以的
     _windowManager.ShowDialog(new ConfigViewModel(), null, settings);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

El ejemplo anterior, puse la nueva ventana superior se establece en true, la ventana de propietario se establece en el modelo de vista actual con destino (si los actuales hereda ViewModel como ViewAware o pantalla, puede llamar al método para obtener GetView objeto View).

WindowManager personalizada

En algunos casos, el gestor de ventanas para lograr la auto-definición es útil. Si es necesario configurar la ventana de propiedades en todos los casos es el mismo valor, lo utilizan también. Por ejemplo, los atributos pueden incluir icono, estados de ventana, tamaño de la ventana, y estilos personalizados. He encontrado más comúnmente conjunto de atributos en Windows es "SizeToContent". Por defecto, Caliburn Micro es SizeToContent.WidthAndHeight conjunto. Esto significa que la ventana cambia automáticamente el tamaño sí basan en su contenido. Aunque a veces se puede hacer esto, pero he encontrado que esto puede conducir a problemas: Un poco de diseño y ajuste de la ventana de la aplicación, por defecto, dará lugar a la maximización transfronteriza.

Creación de un gestor de ventanas a medida es muy simple. En primer lugar, añadir una herencia de clase "WindowManager", entonces se puede anular manera "EnsureWindow" hacer algo como lo siguiente:

protected override Window EnsureWindow(object model, object view, bool isDialog)
{
  Window window = base.EnsureWindow(model, view, isDialog); 
  window.SizeToContent = SizeToContent.Manual;
  return window;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

En este método, primero llamando base.EnsureWindow () para crear una instancia de la ventana. A continuación, puede configurar sus propiedades deseadas de la ventana, y luego devuelva la instancia ventana.

Después de gestor de ventanas a medida solo uso en lugar del gestor de ventanas por defecto, se puede lograr el efecto deseado. Por ejemplo, puede utilizar la siguiente manera de añadir su gestor de ventanas de encargo:

batch.AddExportedValue<IWindowManager>(new AppWindowManager());
  • 1

Esto resultará en todos los lugares utilizando el gestor de ventanas, el informe interno CM adoptará el gestor de ventanas personalizado.

enlaces de referencia

 

Fuente: https://blog.csdn.net/hustlei/article/details/86699377

Supongo que te gusta

Origin www.cnblogs.com/mq0036/p/12444478.html
Recomendado
Clasificación