Do burn.Micro 中 的 de janelas

Perfil Window Manager

gerenciador de janelas Caliburn Micro pode criar ViewModel através da janela, você só precisa passar uma instância ViewModel para o gerenciador de janelas, gerenciador de janelas automaticamente encontrará a vista correspondente, e, como uma caixa de diálogo janela ou abre, antes da abertura também pode visualizar os atributos da configuração parcialmente dependentes.

Window Manager é muito importante para o CM, o aplicativo cria uma nova janela, use as caixas de diálogo pop-up e outro gerenciador de janelas é muito conveniente. Mas não é o mesmo na CM de janelas implementado em cada plataforma (WPF, Silverlight, WindowsPhone, WinRT) é. Então, eu quero entender completamente um pouco difícil, e até mesmo o documento oficial não deu mais detalhes. Assim, por uma questão de simplicidade, este artigo apenas para gerenciador de janelas em WPF introduziu.

Aplicativo WPF Window Manager

Para usar o gerenciador de janelas, você precisa ter um objeto gerenciador de janelas. Nós geralmente prática é configurar o COI em Bootstrapper, criar um gerenciador de janelas e importadas para o recipiente COI (ver artigos relacionados configuração Bootstrapper antes learning). configuração código CIO pode ser tal (MEF para aqui são exemplares do recipiente, como COI):

  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

Então precisamos extrair o objeto de janelas de janelas do ViewModel. Especificamente, o seguinte:

[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

De janelas, mas muito simples de usar, o seguinte código irá criar um novo ShellViewModel, e encontrar ShellView acordo com ShellViewModel, em seguida, exibir a janela ShellView, ShellViewModel se tornará Datacontext ShellView de.

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

Window Manager para abrir as janelas, caixas de diálogo e pop-ups, você pode simplesmente chamar uma abordagem diferente pode ser. Você pode Caliburn Micro vem HelloWindowManager exemplo, para ver mais uso gerenciador de janelas de janelas.

De janelas de parâmetros de configuração

Quando gerenciador de janelas criar uma janela, você pode passar parâmetros para as propriedades da nova janela. Isto irá permitir uma melhor você de acordo com suas necessidades, melhor controle sobre sua aplicação. Pode referir-se o seguinte exemplo:

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

O exemplo acima, eu coloquei a nova janela de nível superior é definida como true, a janela de proprietário é definido para o ViewModel atual ligado (se as herda ViewModel atuais, como ViewAware ou tela, você pode chamar o método para obter GetView Ver objecto).

de janelas personalizada

Em alguns casos, o gerenciador de janelas para alcançar a auto-definição é útil. Se você precisa definir a janela de propriedades em todas as instâncias é o mesmo valor, usá-lo bem. Por exemplo, os atributos podem incluir ícone ícone, estados de janela, o tamanho da janela e estilos personalizados. Eu achei mais comumente conjunto de atributos no Windows é "SizeToContent". Por padrão, Caliburn Micro é conjunto SizeToContent.WidthAndHeight. Isto significa que a janela se redimensiona automaticamente com base em seu conteúdo. Embora às vezes você pode fazer isso facilmente, mas eu achei que isso pode levar a problemas: Alguns layout e definir a janela do aplicativo, por padrão, vai levar a maximização transfronteiriça.

Criando um gerenciador de janelas personalizada é muito simples. Primeiro, adicione uma herança para a aula "de janelas", então você pode substituir caminho "EnsureWindow" para fazer algo como o seguinte:

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

Neste método, primeiro chamando base.EnsureWindow () para criar uma instância de janela. Em seguida, você pode configurar suas propriedades janela desejada e, em seguida, basta retornar a instância janela.

Depois de apenas uso gerenciador de janelas personalizado em vez do gerenciador de janelas padrão, você pode conseguir o efeito desejado. Por exemplo, você pode usar a seguinte maneira de adicionar o seu gerenciador de janelas personalizada:

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

Isso resultará em todos os lugares usando o gerenciador de janelas, o CM relatório interno adotará seu gerenciador de janelas personalizadas.

links de referência

 

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

Acho que você gosta

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