使用MahApps保持样式扩展WPF中的文本框

本文关键字:文本 WPF 扩展 MahApps 样式 使用 | 更新日期: 2023-09-27 18:10:06

我创建了一个自定义文本框类,用于验证用户的输入是否只允许十六进制值,并在xaml中使用这个新文本框(HexTextBox)。它工作得很好,但是HexTextBox失去了Mahapps的所有样式,包括配色方案和TextBoxHelper。你知道如何使用这个扩展的TexBox并保持它的样式吗?

HexTextBox:

    public class HexTextBox : TextBox
    {
    public HexTextBox()
    {
    }
    /// <summary>
    /// Raise when a keyboard key is pressed.
    /// </summary>
    /// <param name="e">The event args.</param>
    protected override void OnPreviewKeyDown(KeyEventArgs e)
    {
        if (e.Key == Key.Space)
        {
            e.Handled = true;
        }
        base.OnPreviewKeyDown(e);
    }
    /// <summary>
    /// Raise when a text will be inputed in the text box object.
    /// </summary>
    /// <param name="e">The event args.</param>
    protected override void OnTextInput(TextCompositionEventArgs e)
    {
        int hexNumber;
        e.Handled = !int.TryParse(e.Text, NumberStyles.HexNumber, CultureInfo.CurrentCulture, out hexNumber);
        base.OnTextInput(e);
    }
}

Window.xaml

<UserControl
...
    xmlns:CoreWPF="clr-namespace:CoreWPF;assembly=CoreWPF" 
...>
<CoreWPF:HexTextBox 
        Text="{Binding DataXor1, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
        Grid.Column="2" Grid.Row="0"
        controls:TextBoxHelper.ClearTextButton="True"
        Height="26"
        TextWrapping="Wrap" 
        CharacterCasing="Upper"
        VerticalAlignment="Center"/>

提前感谢!

使用MahApps保持样式扩展WPF中的文本框

为您的自定义控件创建默认样式,它将基于TextBox样式。

<Style TargetType="Controls:HexTextBox" BasedOn="{StaticResource {x:Type TextBox}}"/>