漫坊亭

社会の底辺プログラマ

Caliburn Micro Part 5: The Window Manager をやってみる。

Mindscape Blog » Blog Archive » Caliburn Micro Part 5: The Window Manager manbou404.hatenablog.com

要は、Window Manager の使い方

以下は、前回のソリューションをつかう。
ShellViewとShellViewModelを空にしておく。
ColorView, ColorViewModel, ColorEventを削除する。

Using a Window Manager

  1. ShellViewにボタンを追加
<!--ShellView.xaml-->
    <Grid Width="300" Height="300" Background="LightBlue">
        <Button Name="OpenWindow" Content="Open Window" Margin="30" />
    </Grid>
  1. ShellViewModelにwindowManagerをもらうのと、追加したボタンのハンドラを追加
// <ShellViewModel.cs>
    [Export(typeof(IShell))]
    public class ShellViewModel : PropertyChangedBase, IShell
    {
        private readonly IWindowManager _windowManager;

        [ImportingConstructor]
        public ShellViewModel(IWindowManager windowManager)
        {
            _windowManager = windowManager;
        }

        public void OpenWindow()
        {
            dynamic settings = new ExpandoObject();
            settings.WindowStartupLocation = WindowStartupLocation.Manual;

            _windowManager.ShowWindow(new ShellViewModel(_windowManager), null, settings);
        }
    }

こんな感じになる。

f:id:jfactory:20150626163046p:plain

親ウィンドウを閉じると終了する。

Custom Window Managers

  1. プロジェクトにAppWindowManagerを追加する。
// <AppWindowManager.cs>
    public class AppWindowManager : WindowManager
    {
        protected override Window EnsureWindow(object model, object view, bool isDialog)
        {
            Window window = base.EnsureWindow(model, view, isDialog);

            window.SizeToContent = SizeToContent.Manual;
            window.Width = 300;
            window.Height = 200;

            return window;
        }
    }
  1. AppBootstrapperで、WindowManagerをAppWindowManagerに差し替える
// <AppBootstrapper.cs :: Configure内>
   // batch.AddExportedValue<IWindowManager>(new WindowManager());
   //                                            ↓↓↓↓↓↓↓
      batch.AddExportedValue<IWindowManager>(new AppWindowManager());

こんな感じになった。 f:id:jfactory:20150626163748p:plain

ソース一式