当前位置:  开发笔记 > 编程语言 > 正文

当我的wpf绑定验证失败并且包含的​​面板不再可见时,如何摆脱红色矩形?

如何解决《当我的wpf绑定验证失败并且包含的​​面板不再可见时,如何摆脱红色矩形?》经验,为你挑选了1个好方法。

我有一种情况,我使用ExceptionValidationRule使用wpf数据绑定和验证.

解决方案的另一部分invovles折叠一些面板并显示其他面板.

如果设置了验证异常 - 即UI在UI元素周围显示带有验证问题的红色边框,并且包含的​​面板已折叠,则仍会显示红色边框.这显然不是意味着什么?这有解决方法吗?任何人都知道这是否是设计的?

提供的最小代码示例(不是我的实际代码,但复制问题).创建一个新的WpfApplication(我称之为WpfDataBindingProblem).

window1的xaml如下:


    

        
            
                
                    
                        
                    
                
            
        

        
            
                The quick brown fox jumps over the lazy dog.
            
        

        

    

window1的代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfDataBindingProblem {

    public partial class Window1 : Window {
        public Window1() {
            InitializeComponent();

            this.DataContext = new MyClass("default");
        }

        private void Button_Click(object sender, RoutedEventArgs e) {
            panel1.Visibility = panel1.Visibility == Visibility.Collapsed ?
                Visibility.Visible : Visibility.Collapsed;
            panel2.Visibility = panel2.Visibility == Visibility.Collapsed ?
                Visibility.Visible : Visibility.Collapsed;
        }
    }

    public class MyClass : INotifyPropertyChanged {

        private string mTextValue;

        public MyClass(string defaultText) {
            TextValue = defaultText;
        }

        public string TextValue {
            get {
                return mTextValue;
            }
            set {
                mTextValue = value;
                if (string.IsNullOrEmpty(mTextValue)) {
                    throw new ApplicationException("Text value cannot be empty");
                }
                OnPropertyChanged(new PropertyChangedEventArgs("TextValue"));
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(PropertyChangedEventArgs e) {
            if (this.PropertyChanged != null) {
                this.PropertyChanged(this, e);
            }
        }
    }

}

要重现该问题,请运行该应用程序.从文本框和选项卡中删除默认文本 - 显示红色矩形表示验证问题.单击按钮.隐藏包含红色矩形控件的面板,显示另一个面板,但红色矩形仍然存在.AARGH!

所有人都非常感谢.

PS道歉很长的问题!



1> Donnelle..:

如果我没记错的话,这是一个众所周知的问题.我们重新模板化文本框以包含以下内容:


    
        
            
                
        
            
                
                    
                
             
         
    

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有