我制作应用,我喜欢将一些字节写入文本框。我想验证是否将真正的HEX代码写入文本框,如果没有则提醒用户。
我从未在MVVM和XAML中做过这个。怎么做?我在网上找到了几个教程,但问题是我喜欢写64个字节。我有64个文本框在一个数组中拉在一起。
其中一个文本框:
<TextBox Text="{Binding TB[4], UpdateSourceTrigger=PropertyChanged}" Grid.Column="0" Grid.Row="0" Style="{StaticResource byteTextBoxStyle}"/>
和数组变量:
private string[] _tb = new string[64];
public string[] TB
{
get
{ return _tb; }
set
{
_tb = value;
NotifyPropertyChanged("TB");
}
}
目标是红色文本块位于所有文本框之下并写入红色(Something like that)。
我可以在按下按钮后再这样做 - 将数组拉到一个字符串并用正则表达式检查是不行的。 但我实时想要这个,当用户输入文字并立即识别是否可以。
请求帮助,因为我是MVVM和WPF的新手。如果有任何问题请询问。谢谢!
答案 0 :(得分:2)
我以前使用System.Windows.Interactivity.dll
做了类似的事情https://www.nuget.org/packages/System.Windows.Interactivity.WPF/
如果键入非十六进制值,它所做的就是终止键击事件。
{
/// <summary>
/// Provides functionality to allow users to type only letters [0-9 A-F a-f].
/// </summary>
public class HexEditTextBox : TriggerAction<DependencyObject>
{
protected override void Invoke(object parameter)
{
var textBox = this.AssociatedObject as TextBox;
if (textBox != null) textBox.PreviewKeyDown += HandlePreviewKeyDownEvent;
}
/// <summary>
/// Checks whether the input is a valid key for a Hex number.
/// Sets the 'Handled' Property as True if the input is invalid, so that further actions will not be performed for this Action.
/// </summary>
/// <param name="sender"></param>
/// <param name="e">KeyEventArgs instance</param>
private void HandlePreviewKeyDownEvent(object sender, KeyEventArgs e)
{
var acceptedKeys = new List<Key>()
{
Key.D0, Key.D1, Key.D2, Key.D3,Key.D4,Key.D5,Key.D6,Key.D7,Key.D8,Key.D9,
Key.A,Key.B,Key.C,Key.D,Key.E,Key.F,
Key.Tab,Key.Back,Key.Delete,Key.Left,Key.Right,Key.Up,Key.Down,Key.Enter,Key.Home,Key.End,
Key.NumPad0,Key.NumPad1,Key.NumPad2,Key.NumPad3,Key.NumPad4,Key.NumPad5,Key.NumPad6,Key.NumPad7,Key.NumPad8,Key.NumPad9
};
e.Handled = !acceptedKeys.Contains(e.Key);
}
}
}
您应该可以在此处插入验证。