Укажите значение для System.Windows.Data.Binding, вызвало исключение

Я добавляю правило проверки в текстовое поле (следующие примеры на WPF 4, выпущенной Адамом Натаном )

При запуске приложения я сталкиваюсь со следующим загадочным сообщением об ошибке

  

Укажите значение для 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);
        }
    }
}
7 голосов | спросил Sung Kim 10 +04002010-10-10T09:27:46+04:00312010bEurope/MoscowSun, 10 Oct 2010 09:27:46 +0400 2010, 09:27:46

1 ответ


0

Я думаю, что это связано с режимом привязки по умолчанию для TextBox.Text, который является TwoWay, и для этого Path требуется. Вы можете попробовать установить Mode="OneWay" в качестве атрибута в теге Binding, который должен работать здесь, но я не совсем уверен в ваших общих требованиях.

ответил whoisthis 10 +04002010-10-10T10:43:42+04:00312010bEurope/MoscowSun, 10 Oct 2010 10:43:42 +0400 2010, 10:43:42

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132