2016-11-14 4 views
1

Ich verwende das AvalonDock Steuerelement, um meine Ansichten als Registerkarten anzuzeigen. In einigen Fällen möchte ich stattdessen ein neues Fenster öffnen. Im Moment bin ich die Handhabung, dass in dem LayoutInitializer:Make FloatingWindow modal

public void AfterInsertDocument(LayoutRoot layout, LayoutDocument anchorableShown) 
{ 
    if (anchorableShown.Content != null && anchorableShown.Content is ViewModelBase) 
    { 
     var viewModel = ((ViewModelBase)anchorableShown.Content); 
     if (viewModel.Type == ViewModelBase.ViewType.Popup) 
     { 
      anchorableShown.FloatingWidth = viewModel.PopupWidth; 
      anchorableShown.FloatingHeight = viewModel.PopupHeight; 
      anchorableShown.FloatingTop = viewModel.PopupTop; 
      anchorableShown.FloatingLeft = viewModel.PopupLeft; 

      anchorableShown.Float(); 
     } 
    }   
} 

Das funktioniert gut. Aber ich möchte dieses neue Floating-Fenster als modales Fenster haben. Und es darf nicht andockbar sein. Ich weiß nicht, wo ich das hinkriege.

+1

floting Modellfenster, das nicht andockbaren ist = nicht wahr Brauchst du AvalonDock, benutze einfach ein Standardfenster? – stijn

+0

Warum möchten Sie genau ein Floating-Fenster modal sein? Was ist los mit "Standard" -Fenster? – dymanoid

+0

@stijn - ich möchte die gleichen Vorlagen + Logik verwenden. Wenn ich "normale" (Standard) Fenster verwenden würde, dann muss ich dasselbe für die Fenster implementieren. – mxdeluxe

Antwort

1

Der beste Weg - wie @stijn bereits beantwortet - ist, ein separates Fenster zu erstellen.

Hier ist meine XAML-Definition:

<Window ... > 
    <Window.Resources> 
     <DataTemplate DataType="{x:Type local:FirstViewModel}"> 
      <local:FirstView /> 
     </DataTemplate> 

     <DataTemplate DataType="{x:Type local:SecondViewModel}"> 
      <local:SecondView /> 
     </DataTemplate> 

    </Window.Resources> 

    <DockPanel LastChildFill="True" Name="mainPanel" > 
     <ContentPresenter Content="{Binding}"> 
     </ContentPresenter> 
    </DockPanel> 
</Window> 

Foreach Ansichtsmodell/Blick Zuordnung Ich benutze diesen DataTemplate Block.

In meiner WindowManager Implementierung ich ein neues Fenster erstellen:

private System.Windows.Window CreateWindow(ViewModelBase viewModel) 
{ 
    var window = new PopupWindow(); 
    window.DataContext = viewModel; 

    return window; 
} 

... und es als modale Fenster zeigen:

public void ShowWindow(ViewModelBase viewModel) 
{ 
    var window = CreateWindow(viewModel); 
    window.ShowDialog(); 
}