2010-10-10 47 views
6

我(亚当森上WPF 4 Unleashed下面的实施例)将验证规则以一个文本框上“System.Windows.Data.Binding”提供值抛出异常

当启动应用程序时,我面对的以下神秘的错误消息

上 'System.Windows.Data.Binding' 提供值抛出异常

alt text

错误意味着什么,需要做些什么来解决问题?

以下是完整的源代码

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); 
     } 
    } 
} 

回答

5

我认为它与TextBox.Text的TwoWay默认绑定模式有关,并且对于该路径是必需的。您可以尝试设置Mode="OneWay"作为Binding标记中的一个属性,该属性应该可以在这里工作,但我不完全确定您的总体要求。