自定义文本框控件中的 ValidationError 模板

ValidationError template in a custom textbox control

我创建了一个扩展文本框控件的自定义控件,以允许仅输入字母数字字符。

后来,我用INotifyDataErrorInfo实现了错误处理。问题是当显示错误时,在普通的文本框中它显示正确,但在我的自定义文本框中它们没有显示,只有边框变成红色。

自定义文本框有点小,有点像双边框。

这是我的代码:

// CustomTextbox.cs
using System.Text.RegularExpressions;
using System.Windows.Controls;
using System.Windows.Input;

namespace ExampleApp.Controls
{
    public class CustomTextbox: TextBox
    {
        private static readonly Regex regex = new Regex("^[a-zA-Z0-9]+$");

        protected override void OnPreviewKeyDown(KeyEventArgs e)
        {
            if (e.Key == Key.Space)
            {
                e.Handled = true;
            }

            base.OnKeyDown(e);
        }

        protected override void OnPreviewTextInput(TextCompositionEventArgs e)
        {
            if (!regex.IsMatch(e.Text))
            {
                e.Handled = true;
            }

            base.OnPreviewTextInput(e);
        }
    }
}
// MainWindow.xaml

<customControls:CustomTextbox Text="{Binding Title}"
    FontSize="32" Width="200"
    HorizontalAlignment="Center" 
    VerticalAlignment="Center" 
    Margin="0 -200 0 0"
/>
<TextBox Text="{Binding Title}"
    FontSize="32" Width="200"
    HorizontalAlignment="Center"
    VerticalAlignment="Center"
/>

我是否需要从文本框继承模板或类似的东西?

谢谢!

<customControls:CustomTextbox Text="{Binding Title}"
    FontSize="32" Width="200"
    HorizontalAlignment="Center" 
    VerticalAlignment="Center" 
    Margin="0 -200 0 0"
    Style={StaticRessource {x:Type TextBox}}
/>

有了这个,您将获得与 TextBox 相同的样式。如果您已明确设置 TextBox 样式,这将不起作用。在这种情况下,您只需要从 TextBox

复制样式 属性