日期:2014-05-16  浏览次数:20770 次

WPF,为什么自定义的窗体里面不进行数据验证
我做了一个自定义的窗体MyWindow,里面有一个TextBox,其Text属性实行了绑定,并且定义了数据验证。现在的问题是,TextBox并不进行数据验证,也就是说在其中输入非法字符时,其边框并不变成红色。而这一切如果放在默认的Window窗体中,则一切正常,请问这是什么原因呢?


一个名为MyControl的dll类库,包含一个验证规则类和自定义的MyWindow控件:

 public class RangeRule : ValidationRule   //验证规则类
    {
        public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
        {
            return new ValidationResult(false, null);   
        }
    }


自定义的窗体(MyControl):

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:MyControl">
    <Style TargetType="{x:Type local:MyWindow}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:MyWindow}">
                    <Border x:Name="windowFrame" BorderBrush="#395984" BorderThickness="1" Background="White">
                        <ContentPresenter/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>


 public class MyWindow : Window
    {
        static MyWindow()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(MyWindow), new FrameworkPropertyMetadata(typeof(MyWindow)));
        }
    }


下面是主程序,引用了上面的MyControl类库:

<xj:MyWindow x:Class="WPF3.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:xj="clr-namespace:MyControl;assembly=MyControl"
        Title="MainWindow" Height="400" Width="605" MinHeight="600" MinWidth="828.8">
    <Grid Width="943">
       &