WPF,为啥自定义的窗体里面不进行数据验证
WPF,为什么自定义的窗体里面不进行数据验证
我做了一个自定义的窗体MyWindow,里面有一个TextBox,其Text属性实行了绑定,并且定义了数据验证。现在的问题是,TextBox并不进行数据验证,也就是说在其中输入非法字符时,其边框并不变成红色。而这一切如果放在默认的Window窗体中,则一切正常,请问这是什么原因呢?
一个名为MyControl的dll类库,包含一个验证规则类和自定义的MyWindow控件:
自定义的窗体(MyControl):
下面是主程序,引用了上面的MyControl类库:
------解决方案--------------------
我做了一个自定义的窗体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">
<TextBox Name="meizhujiage" Width="50" Height="23" TextAlignment="Center" VerticalAlignment="Center">
<TextBox.Text>
<Binding RelativeSource="{RelativeSource Self}" Path="Tag" NotifyOnValidationError="True">
<Binding.ValidationRules>
<xj:RangeRule/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
<Button Content="Button" HorizontalAlignment="Left" Margin="370,130,0,-107" VerticalAlignment="Top" Width="75"/>
</Grid>
</xj:MyWindow>
public partial class MainWindow : MyWindow
{
public MainWindow()
{
InitializeComponent();
}
}
------解决方案--------------------