2017-07-04 1 views
0

Es scheint, dass WPF eine Validierungsregel hat, die standardmäßig aktiviert ist. Wenn ich nicht-numerischen Text in das gebundene Textfeld eingib und es aushefte, wird ein Lese-Rand darum herum angezeigt. Was geht hier vor sich? Ich habe ValidatesOnExceptions auf false gesetzt, woher kommt die Validierungsregel? Ich verwende Version 4.5.2 des .Net-Frameworks.Wie kann ich die Standardvalidierung in WPF ausschalten?

Hier ist meine 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> 

Hier ist der Code hinter

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

Antwort

1

Sie können nie setzen eine int Eigenschaft auf etwas anderes als ein gültiger int Wert.

Diese "Validierung", bzw. Typ-Sicherheitsfunktion der Programmiersprache, kann nicht ausgeschaltet werden.

Sie können jedoch den Standardfehler Vorlage loswerden oder anpassen, wenn Sie möchten. Nur stellen Sie die Validation.ErrorTemplate Eigenschaft auf eine Emoty 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> 
+0

Vielen Dank. Was ist wenn ein int? und ich möchte, dass der leere Text auf null abgebildet wird, dies scheint nicht standardmäßig zu funktionieren. Muss ich einen benutzerdefinierten Konverter schreiben? – Shane

+0

Wahrscheinlich. Sie müssen die leere Zeichenfolge in null konvertieren. String.Empty ist kein gültiges int? Wert. – mm8

Verwandte Themen