Exemple #1
0
 public static T FindObjectByName <T>(this DockingManager dm, string name)
     where T : DependencyObject
 {
     return(dm?.Layout?.Descendents()
            .OfType <DependencyObject>()
            .Where(x => DockContainer.GetName(x) == name)
            .OfType <T>()
            .FirstOrDefault());
 }
Exemple #2
0
        private void InitOnStart <TStartWindow>(UiShowStartWindowOptions options)
            where TStartWindow : class
        {
            if (options != null)
            {
                Title = options.Title;
            }

            DockingManager = options?.DockingManager ?? new DefaultDockingManager();
            IDisposable dockingManagerSubscription = null;
            Dictionary <ILayoutPane, LayoutContent> placeholders = null;

            this.WhenAnyValue(x => x.DockingManager)
            .Subscribe(dm =>
            {
                if (placeholders != null)
                {
                    foreach (var placeholder in placeholders.Values)
                    {
                        placeholder.Close();
                    }
                }

                dockingManagerSubscription?.Dispose();
                if (dm == null)
                {
                    return;
                }
                dockingManagerSubscription = Observable
                                             .FromEventPattern(
                    x => dm.ActiveContentChanged += x,
                    x => dm.ActiveContentChanged -= x)
                                             .Select(x => ((DockingManager)x.Sender).ActiveContent as IView)
                                             .Subscribe(x => SelectedView = x);

                var dmDescendents = dm.Layout.Descendents().ToList();
                placeholders      = dmDescendents
                                    .OfType <DependencyObject>()
                                    .Where(x => !string.IsNullOrEmpty(DockContainer.GetName(x)))
                                    .OfType <ILayoutPane>()
                                    .ToDictionary(
                    x => x,
                    x =>
                {
                    var content = new LayoutAnchorable();
                    switch (x)
                    {
                    case LayoutGroup <LayoutAnchorable> la:
                        la.Children.Add(content);
                        break;

                    case LayoutGroup <LayoutContent> ld:
                        ld.Children.Add(content);
                        break;
                    }

                    content.IsVisible = false;

                    return((LayoutContent)content);
                });
            });

            var startObject = Container.Resolve <TStartWindow>() ??
                              throw new InvalidOperationException(
                                        $"You should register {typeof(TStartWindow)} in container");

            Window = startObject as Window ??
                     throw new InvalidCastException($"{startObject.GetType()} is not a window");
        }