WPF - 应用程序中所有文本框的自定义错误模板

WPF - Custom ErrorTemplate for all TextBoxes in App

我有一个包含许多文本框的表单,每个文本框都需要相同的验证错误模板。 现在,我不想为每个文本框编写这些验证错误模板。那么我必须把它放在哪里,以便所有文本框都受到影响?

带有 Validation.ErrorTemplate 的文本框:

<TextBox x:Name="textBox3" TextWrapping="Wrap" Height="23" Text="{Binding User_Id, UpdateSourceTrigger=PropertyChanged, NotifyOnValidationError=True}" VerticalAlignment="Top">
<Validation.ErrorTemplate>
  <ControlTemplate>
    <StackPanel>
      <AdornedElementPlaceholder x:Name="textBox"/>
      <ItemsControl ItemsSource="{Binding}">
        <ItemsControl.ItemTemplate>
          <DataTemplate>
            <TextBlock Text="{Binding ErrorContent}" Foreground="Red"/>
          </DataTemplate>
        </ItemsControl.ItemTemplate>
      </ItemsControl>
    </StackPanel>
  </ControlTemplate>
</Validation.ErrorTemplate>
</TextBox>

我的自定义控件:

 public class ValidationTextBox : TextBox
    {
        static ValidationTextBox()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(ValidationTextBox), new FrameworkPropertyMetadata(typeof(ValidationTextBox)));
            //Validation.SetErrorTemplate(new ValidationTextBox(), )
        }
        public ValidationTextBox() { }
    }

您需要在文本框容器的 "Resourse" 标记内为文本框定义新样式。此样式将为容器内的每个文本框实现。

示例:

<StackPanel>
<StackPanel.Resources>
<Style TargetType=TextBox>
<Setter Property="Validation.ErrorTemplate">
<Setter.Value>
<ControlTemplate>
    <StackPanel>
      <AdornedElementPlaceholder x:Name="textBox"/>
      <ItemsControl ItemsSource="{Binding}">
        <ItemsControl.ItemTemplate>
          <DataTemplate>
            <TextBlock Text="{Binding ErrorContent}" Foreground="Red"/>
          </DataTemplate>
        </ItemsControl.ItemTemplate>
      </ItemsControl>
    </StackPanel>
  </ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</StackPanel.Resources
<TextBox/>
<TextBox/>
<TextBox/>
</StackPanel>