我正在向文本框添加验证规则(以下是Adam Nathan在WPF 4 Unleashed 上的示例)
启动应用程序时,我遇到以下隐藏的错误消息
为'System.Windows.Data.Binding'提供值引发异常
错误意味着什么以及需要采取哪些措施来解决问题?
以下是完整的源代码
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);
}
}
}
答案 0 :(得分:5)
我认为它与TextBox.Text的默认绑定模式有关,它是TwoWay,并且需要该Path。您可以尝试将Mode="OneWay"
设置为Binding标记中的属性,该属性应该可以在此处使用,但我不完全确定您的整体要求。