Beispiel #1
0
        /// <summary>ExpanderへGridSnapModeの設定</summary>
        /// <param name="obj"></param>
        /// <param name="mode"></param>
        public static void SetGridSnap(Expander obj, GridSnapMode mode)
        {
            if (obj == null)
            {
                return;
            }

            obj.SetValue(GridSnapProperty, mode);
        }
Beispiel #2
0
        /// <summary>垂直方向時のExpanderの内部処理拡張メソッド</summary>
        /// <param name="expander"></param>
        /// <param name="mode"></param>
        private static void AttachMode_Vertical(this Expander expander, GridSnapMode mode)
        {
            if (expander == null)
            {
                return;
            }
            // イベント解除
            expander.Expanded  -= Expanded_Vertical;
            expander.Collapsed -= Collapsed_Vertical;

            Grid targetGrid = expander.FindAncestor <Grid>();

            if (targetGrid == null)
            {
                return;
            }

            // 対象となるGridの情報を取得していく
            int           gridRow             = Grid.GetRow(expander);
            RowDefinition targetRowDefinition = targetGrid.RowDefinitions[gridRow];

            // プロパティ内に情報をセット
            SetTargetRowDefinition(expander, targetRowDefinition);
            SetLastGridLength(expander, targetRowDefinition.Height);

            // GridSplitterを取得
            GridSplitter gridSplitter = null;

            if (mode == GridSnapMode.Auto)
            {
                gridSplitter = targetGrid.FindDescendant <GridSplitter>();
            }
            else
            {
                gridSplitter = GetTargetGridSplitter(expander);
            }

            if (mode == GridSnapMode.Explicit && gridSplitter == null)
            {
                // GridSplitterの移動をそのままにするのにGridSplitterがnullはあり得ない
                throw new ArgumentException("Mode [explicit] requires [TargetGridSplitter]");
            }

            // Binding実行
            gridSplitter.SetBinding(UIElement.VisibilityProperty, new Binding(nameof(Expander.IsExpanded))
            {
                Mode      = BindingMode.OneWay,
                Converter = BoolToVisibleConverter,
                Source    = expander
            });

            expander.Expanded  += Expanded_Vertical;
            expander.Collapsed += Collapsed_Vertical;
        }
Beispiel #3
0
        private static void AttachMode_Horizontal(this Expander expander, GridSnapMode mode)
        {
            if (expander == null)
            {
                return;
            }

            expander.Expanded  -= Expanded_Horizontal;
            expander.Collapsed -= Collapsed_Horizontal;

            Grid targetGrid = expander.FindAncestor <Grid>();

            if (targetGrid == null)
            {
                return;
            }

            if (mode == GridSnapMode.None)
            {
                return;
            }

            int gridColumn = Grid.GetColumn(expander);
            ColumnDefinition columnDefinition = targetGrid.ColumnDefinitions[gridColumn];

            SetTargetColumnDefinition(expander, columnDefinition);

            // 初回にExpanderを開く際、開かれたGridのActualWidthをとれずに検索テキストボックスの幅が微小になってしまう
            // そのため、exeを立ち上げて最初にExpanderを開く際のみMainWindowの比で強引に値を入れてやる
            // Expanderを開く前はExpander側の幅を調節できないため、数値がおかしくなる心配はないと想定される
            if (_isFirst)
            {
                SetFirstGridLength(expander);
            }
            else
            {
                SetLastGridLength(expander, columnDefinition.Width);
            }

            GridSplitter gridSplitter = null;

            if (mode == GridSnapMode.Auto)
            {
                gridSplitter = targetGrid.FindDescendant <GridSplitter>();
            }
            else
            {
                gridSplitter = GetTargetGridSplitter(expander);
            }

            if (mode == GridSnapMode.Explicit && gridSplitter == null)
            {
                throw new ArgumentException("[Explicit] requires [TargetGridSplitter]");
            }

            gridSplitter.SetBinding(UIElement.VisibilityProperty, new Binding(nameof(Expander.IsExpanded))
            {
                Mode      = BindingMode.OneWay,
                Converter = BoolToVisibleConverter,
                Source    = expander,
            });

            expander.Expanded  += Expanded_Horizontal;
            expander.Collapsed += Collapsed_Horizontal;
        }
Beispiel #4
0
 public static void SetGridSnap(Expander obj, GridSnapMode value)
 {
     obj.SetValue(GridSnapProperty, value);
 }