示例#1
0
        private void ComplateEdit()
        {
            if (!IsVisible)
            {
                return;
            }

            //合法性检查
            string err = CfgPath.CheckTagFormat(Edit.Text);

            if (err != null)
            {
                MessageBox.Show(err, "标签不合法,请重新输入", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }


            //第一步,先将编辑器隐藏起来,否则后面有TextChangedCallback导致业务流程处理后,
            //会有很多意想不到的流程发生,导致多次递归调用本函数(HideEdit)。
            //比如:HideEdit=>lostfocus=>HideEdit
            GUTag  tag       = NoEdit.GUTag;
            string oldTitle  = NoEdit.Text;
            string newTitle  = Edit.Text;
            Canvas parentBak = Parent;



            //将这两个置空,表示该编辑器不可见了(IsVisible = false)。
            Parent = null;
            NoEdit = null;

            try
            {
                //隐藏编辑框
                parentBak.Children.Remove(Edit);
                System.Diagnostics.Debug.WriteLine("HideFloat1");

                //如果文本内容发生修改,通知观察者

                if (oldTitle != newTitle && oldTitle != null && newTitle != null)
                {
                    TextChangedCallback?.Invoke(parentBak, tag, newTitle);
                    System.Diagnostics.Debug.WriteLine("HideFloat2");
                }
            }
            finally
            {
                parentBak?.Focus();   //因为编辑框失去焦点时会有相应的处理,所以这儿设置焦点的处理必须放在所有处理完成之后
                //否则可能形成递归调用
            }
        }
示例#2
0
        //编辑框失去焦点,表示输入结束,关闭编辑框并通知变更
        private void Edit_LostFocus(object sender, RoutedEventArgs e)
        {
            string err = CfgPath.CheckTagFormat(Edit.Text);

            if (err != null)
            {
                CancelEdit();
                MessageBox.Show(err, "标签不合法,请重新输入", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }
            else
            {
                ComplateEdit();
            }
        }