J'ajoute une règle de validation à une zone de texte (exemples suivants sur WPF 4 Unleashed par Adam Nathan)Fournir la valeur sur « System.Windows.Data.Binding » a lancé une exception
Lors du démarrage d'une application, je suis confronté à la message d'erreur cryptique
sur apportent une valeur 'System.Windows.Data.Binding' a lancé une exception
Que signifie l'erreur et que faut-il faire pour résoudre le problème?
Voici le code source complet
XAML
<Window.Resources>
<Style x:Key="controlStyle" TargetType="{x:Type Control}">
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="RenderTransform">
<Setter.Value>
<RotateTransform Angle="20" />
</Setter.Value>
</Setter>
<Setter Property="Foreground" Value="Black" />
</Trigger>
</Style.Triggers>
<Setter Property="FontSize" Value="22" />
<Setter Property="Background" Value="Purple" />
<Setter Property="Foreground" Value="White" />
<Setter Property="Height" Value="50" />
<Setter Property="Width" Value="50" />
<Setter Property="RenderTransformOrigin" Value=".5,.5" />
<Setter Property="RenderTransform">
<Setter.Value>
<RotateTransform Angle="10" />
</Setter.Value>
</Setter>
<Setter Property="TextBox.TextAlignment" Value="Right" />
</Style>
<Style x:Key="textBoxStyle" TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="True">
<Setter Property="Background" Value="Red" />
<Setter Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<TextBox Style="{StaticResource textBoxStyle}">
<TextBox.Text>
<Binding>
<Binding.ValidationRules>
<local:JpgValidationRule />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
</StackPanel>
<StackPanel Orientation="Horizontal">
<Button Style="{StaticResource controlStyle}">1</Button>
<ComboBox Style="{StaticResource controlStyle}">
<ComboBox.Items>2</ComboBox.Items>
</ComboBox>
<Expander Style="{StaticResource controlStyle}" Content="3" />
<TabControl Style="{StaticResource controlStyle}">
<TabControl.Items>4</TabControl.Items>
</TabControl>
<ToolBar Style="{StaticResource controlStyle}">
<ToolBar.Items>5</ToolBar.Items>
</ToolBar>
<!--<InkCanvas Style="{StaticResource controlStyle}" />-->
<TextBox Style="{StaticResource controlStyle}" Text="7" />
</StackPanel>
</StackPanel>
JpgValidationRule
using System.Globalization;
using System.IO;
using System.Windows.Controls;
namespace StylesDemo
{
public class JpgValidationRule : ValidationRule
{
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
string fileName = value.ToString();
// Reject nonexistent files:
if (!File.Exists(fileName))
return new ValidationResult(false, "Value is not a valid file!");
// Reject files that don't end in .jpg:
if (Path.GetExtension(fileName).ToUpper() != ".JPG")
return new ValidationResult(false, "Value is not a .jpg file!");
return new ValidationResult(true, null);
}
}
}