如何在WPF中关闭默认验证?

时间:2017-07-04 10:43:01

标签: wpf

WPF似乎有一些默认启用的验证规则。当我在绑定文本框中输入非数字文本并将其选中时,会在其周围显示一个读取边框。这里发生了什么?我已将ValidatesOnExceptions设置为false,验证规则来自何处?我正在使用.Net框架的4.5.2版。

这是我的XAML

<Window x:Class="WpfApplication2.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
            xmlns:local="clr-namespace:WpfApplication2"
            mc:Ignorable="d"
            Title="MainWindow" Height="159.206" Width="193.953">
        <Grid>
            <TextBox x:Name="textBox" Height="23" HorizontalAlignment="Left" VerticalAlignment="Top" TextWrapping="Wrap" 
                     Text="{Binding Foo, ValidatesOnExceptions=False, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" 
                     Width="91" Margin="10,10,0,0"/>
            <TextBox x:Name="textBox1" HorizontalAlignment="Left" Height="23" Margin="10,48,0,0" 
                     TextWrapping="Wrap" Text="TextBox" VerticalAlignment="Top" Width="91"/>
        </Grid>
</Window>

以下是

背后的代码
namespace WpfApplication2
{
    public partial class MainWindow : Window
    {
        public int Foo { get; set; } = 42;
        public MainWindow()
        {
            InitializeComponent();
        }
    }
}

1 个答案:

答案 0 :(得分:1)

您可以永远int属性设置为除有效int值以外的任何其他属性。

无法关闭此&#34;验证&#34;或编程语言的类型安全功能。

但是,如果您愿意,可以删除或自定义默认错误模板。只需将Validation.ErrorTemplate属性设置为情感ControlTemplate

即可
<TextBox x:Name="textBox" Height="23" HorizontalAlignment="Left" VerticalAlignment="Top" TextWrapping="Wrap" 
        Text="{Binding Foo, ValidatesOnExceptions=False, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" 
        Width="91" Margin="10,10,0,0">
    <Validation.ErrorTemplate>
        <ControlTemplate />
    </Validation.ErrorTemplate>
</TextBox>