【问题标题】:WPF - Custom ErrorTemplate for all TextBoxes in AppWPF - 应用程序中所有文本框的自定义错误模板
【发布时间】:2017-06-14 10:50:42
【问题描述】:

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

带有 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() { }
    }

【问题讨论】:

    标签: wpf validation controls


    【解决方案1】:

    您需要在文本框容器的“资源”标签内为文本框定义新样式。容器内的每个文本框都将实现此样式。

    例子:

    <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>
    

    【讨论】:

    • 我把它放在我的 app.xaml(Application.Ressources) 中。那行得通,谢谢! :) 不需要自定义控件。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-29
    • 2016-01-03
    相关资源
    最近更新 更多