2016-11-14 8 views
1

AvalonDockコントロールを使用して、ビューをタブとして表示しています。場合によっては、新しいウィンドウを開く必要があります。現時点では、私はLayoutInitializerにそれを処理しています:正常に動作しますFloatingWindowモーダルにする

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(); 
     } 
    }   
} 

を。しかし、私はこの新しい浮動ウィンドウをモーダルウィンドウにしたいと思っています。ドッキング可能であってはなりません。私はどこでそれを扱うことができるのか分かりません。

+1

flotingモデルウィンドウドッキング可能ではない=あなたはしないでくださいそれのためにAvalonDockが必要です。ちょうど標準のWindowを使いますか? – stijn

+0

フローティングウィンドウをモーダルにしたいのはなぜですか? 「標準」ウィンドウで何が問題になっていますか? – dymanoid

+0

@stijn - 私は同じテンプレート+ロジックを使いたいです。私は "標準"(標準)のウィンドウを使用する場合、私はウィンドウのために同じを実装する必要があります。 – mxdeluxe

答えて

1

@stijnが既に答えたように、最良の方法は、別々のウィンドウを作成することです。私はこのDataTemplateブロックを使用

<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のビューモデル/ビューの割り当て:

は、ここに私のXAML定義です。私WindowManager実装で

が、私は新しいウィンドウを作成:

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

    return window; 
} 

を...と、モーダルウィンドウとして表示:

public void ShowWindow(ViewModelBase viewModel) 
{ 
    var window = CreateWindow(viewModel); 
    window.ShowDialog(); 
} 
関連する問題