2016-11-14 9 views
1

Я использую элемент управления AvalonDock, чтобы показать свои представления в виде вкладок. В некоторых случаях я хочу открыть вместо этого новое окно. На данный момент, я обработки, что в 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(); 
     } 
    }   
} 

Это работает отлично. Но я хочу, чтобы это новое плавающее окно стало модальным окном. И он не должен быть закреплен. Я не знаю, где я могу справиться с этим.

+1

леях и иностранной валюте окна модели, которая не является плавающим = вы не нужен AvalonDock для этого, просто используйте стандартное окно? – stijn

+0

Почему вы хотите, чтобы плавающее окно было модальным? Что случилось с «стандартными» окнами? – dymanoid

+0

@stijn - я хочу использовать те же шаблоны + логику. если бы я использовал «нормальные» (стандартные) окна, тогда я должен реализовать их для окон. – mxdeluxe

ответ

1

Лучший способ - как @stijn уже ответил - это создать отдельное окно.

Вот мое определение XAML:

<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 ViewModel/View присваивание Я использую этот DataTemplate блок.

В моей 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(); 
}