将 Validation.ErrorTemplate 设置为 WPF 文本框上的样式会导致绑定错误异常

Setting Validation.ErrorTemplate as Style on a WPF TextBox is causing a binding error exception

在我的 WPF 应用程序中,我有以下资源:

<ResourceDictionary>
    <Style x:Key="OnErrorTextBoxStyle" TargetType="{x:Type TextBox}"> 
        <Style.Triggers>
            <Trigger Property="Validation.HasError" Value="True">
                <Setter Property="BorderBrush" Value="Red"/>
                <Setter Property="Validation.ErrorTemplate">
                    <Setter.Value>
                        <ControlTemplate>
                            <StackPanel>
                                <AdornedElementPlaceholder x:Name="placeholder" />
                                <TextBlock FontSize="11" FontStyle="Italic" Foreground="Red"
                               Text="{Binding ElementName=placeholder, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" />
                            </StackPanel>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
</ResourceDictionary>

我的文本框:

<TextBox Grid.Column="0"
         Grid.Row="1"                 
         Style="{StaticResource OnErrorTextBoxStyle}"
         Height="30"                                 
         Margin="5,8,8,15">            
    <TextBox.Text>
        <Binding Path="MyPath"
                 UpdateSourceTrigger="PropertyChanged"
                 >
            <Binding.ValidationRules>
                <Rules:PathValidationRule ValidatesOnTargetUpdated="True" />
            </Binding.ValidationRules>
        </Binding>                         
    </TextBox.Text>            
</TextBox>

在视图模型中,我的 myPath 属性 具有以下方面(我在这里只显示重要的东西):

public string MyPath
{
    get => myObject.currentPath.LocalPath; // currentPath is an Uri Object

    set
    {
        if (!string.IsNullOrWhiteSpace(value))
        {
           // creates an Uri object using value and Uri.TryCreate
           if (Uri.TryCreate(value, UriKind.Absolute, out Uri newUri))
           {
               myObject.currentPath = newUri;
               OnPropertyChanged();
           }
        }
    }
}

当我尝试从视图模型设置 MyPath 属性 时出现以下错误:

Cannot get 'Item[]' value (type 'ValidationError') from 
'(Validation.Errors)' (type 'ReadOnlyObservableCollection`1'). 
BindingExpression:Path=AdornedElement.(0)[0].ErrorContent; 
DataItem='AdornedElementPlaceholder' (Name='placeholder'); target 
element is 'TextBlock' (Name=''); target property is 'Text' (type 
'String') 
ArgumentOutOfRangeException:'System.ArgumentOutOfRangeException: 
Specified argument was out of the range of valid values. Parameter 
name: index'

如果我从 TextBox 中删除静态资源 Style="{StaticResource OnErrorTextBoxStyle}",那么一切都会完美无缺。所以我想我在静态资源中做错了什么,但我不知道是什么。

我的 TextBox 有一个验证规则来验证用户输入的内容。我没有使用任何其他验证机制,例如 INotifyDataErrorInfo 和 IDataErrorInfo。

ControlTemplate 中尝试此绑定:

<TextBlock FontSize="11" FontStyle="Italic" Foreground="Red"
           Text="{Binding [0].ErrorContent}" />