/// BoundRelativeBottom: LostFocus
        private void BoundRelativeBottom_LostFocus(object sender, RoutedEventArgs e)
        {
            var target    = BoundRelative.Bottom;
            var dependent = BoundRelativeInputCorrector.GetDependent(target);

            this.OverwriteText(target);
            this.ResetError(dependent);
        }
        /// enumを指定してレイアウト要素の内容を訂正後に変更する
        private void Correct(BoundRelative target)
        {
            var dependent = BoundRelativeInputCorrector.GetDependent(target);

            // Parse
            double value;

            if (!double.TryParse(this.GetTextBox(target).Text, out value))
            {
                this.OverwriteText(target);
                this.ResetError(dependent);
                return;
            }

            // Window Check
            if (!App.Profile.Current.IsWindowValid)
            {
                this.OverwriteText(target);
                this.ResetError(dependent);
                return;
            }

            // Correct
            RelativeLTRB changed;
            var          result = BoundRelativeInputCorrector.TryChange(
                App.Profile.Current, target, value, out changed);

            // 訂正の必要がない=TextChangedで設定済み
            if (result == BoundRelativeInputCorrector.TryResult.NothingChanged)
            {
                return;
            }

            // Update Profile
            App.Profile.Open();
            App.Profile.Current.BoundRelativeLeft   = changed.Left;
            App.Profile.Current.BoundRelativeTop    = changed.Top;
            App.Profile.Current.BoundRelativeRight  = changed.Right;
            App.Profile.Current.BoundRelativeBottom = changed.Bottom;
            App.Profile.Close();

            //---------------------------------------------------------------
            // Notify self
            if (result.HasFlag(BoundRelativeInputCorrector.TryResult.TargetChanged))
            {
                this.OverwriteText(target);
            }
            else
            {
                this.ResetError(target);
            }
            if (result.HasFlag(BoundRelativeInputCorrector.TryResult.DependentChanged))
            {
                this.OverwriteText(dependent);
            }
            else
            {
                this.ResetError(dependent);
            }
            // Notify other controls
            Commands.CurrentLayoutElementVisualChanged.Execute(null, this);
            //---------------------------------------------------------------
        }
        //-------------------------------------------------------------------

        /// enumを指定してレイアウト要素の内容を変更する
        private void Change(BoundRelative target)
        {
            var dependent = BoundRelativeInputCorrector.GetDependent(target);

            // Parse
            double value;

            if (!double.TryParse(this.GetTextBox(target).Text, out value))
            {
                this.SetError(target, "must be double");
                this.ResetError(dependent);
                return;
            }

            // Window Check
            if (!App.Profile.Current.IsWindowValid)
            {
                this.SetError(target, "Target window is invalid");
                this.ResetError(dependent);
                return;
            }

            // Correct
            RelativeLTRB changed;
            var          result = BoundRelativeInputCorrector.TryChange(
                App.Profile.Current, target, value, out changed);

            // Error表示
            switch (result)
            {
            case BoundRelativeInputCorrector.TryResult.NothingChanged: {
                this.ResetError(target);
                this.ResetError(dependent);
                break;
            }

            case BoundRelativeInputCorrector.TryResult.TargetChanged: {
                this.SetWarning(target, "Return/Enter: Correct Value");
                this.ResetError(dependent);
                return;
            }

            case BoundRelativeInputCorrector.TryResult.DependentChanged:
            case BoundRelativeInputCorrector.TryResult.BothChanged: {
                this.SetWarning(target, "Return/Enter: Correct Value");
                this.SetWarning(dependent);
                return;
            }

            default: Debug.Fail("switch"); throw new System.ArgumentException();
            }

            // 成功: そのまま書き換え(Textは変更しない)
            App.Profile.Open();
            this.SetBoundRelativeValue(target, value);
            App.Profile.Close();

            //---------------------------------------------------------------
            // Notify self
            // Notify other controls
            Commands.CurrentLayoutElementVisualChanged.Execute(null, this);
            //---------------------------------------------------------------
        }