private protected override void Refresh(IFrameNodeState state)
        {
            Node        FocusedNode  = null;
            IFocusFrame FocusedFrame = null;

            if (Focus != null)
            {
                Focus.GetLocationInSourceCode(out FocusedNode, out FocusedFrame);
            }

            base.Refresh(state);

            UpdateFocusChain((IFocusNodeState)state, FocusedNode, FocusedFrame);
        }
        private protected virtual bool IsSameChangeCommentOperationFocus(FocusChangeCommentOperation operation)
        {
            Node Node = null;

            if (operation.State.ParentIndex is IFocusNodeIndex AsNodeIndex)
            {
                Node = AsNodeIndex.Node;
            }
            else if (operation.State is IFocusOptionalNodeState AsOptionalNodeState && AsOptionalNodeState.ParentInner.IsAssigned)
            {
                Node = AsOptionalNodeState.Node;
            }

            Debug.Assert(Node != null);

            Node        FocusedNode  = null;
            IFocusFrame FocusedFrame = null;

            Focus.GetLocationInSourceCode(out FocusedNode, out FocusedFrame);

            return(FocusedNode == Node && FocusedFrame is IFocusCommentFrame);
        }