zoukankan      html  css  js  c++  java
  • HexInput

    基本思路

    PreviewTextInput

    OnTextChange

    OnLostFocus

    PreviewKeyDown

    HexInput.xaml
    1 <UserControl x:Class="MeterGui_BlendView.HexInput"
    2              xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3              xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4              xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    5              xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    6              mc:Ignorable="d">
    7     <TextBox x:Name="TB" PreviewTextInput="TB_PreviewTextInput" TextChanged="TB_TextChanged" PreviewKeyDown="TB_PreviewKeyDown" LostFocus="TB_LostFocus" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"/>
    8 </UserControl>
    HexInput.xaml.cs
      1 using System;
      2 using System.Collections.Generic;
      3 using System.Linq;
      4 using System.Text;
      5 using System.Windows;
      6 using System.Windows.Controls;
      7 using System.Windows.Data;
      8 using System.Windows.Documents;
      9 using System.Windows.Input;
     10 using System.Windows.Media;
     11 using System.Windows.Media.Imaging;
     12 using System.Windows.Navigation;
     13 using System.Windows.Shapes;
     14 
     15 namespace MeterGui_BlendView
     16 {
     17     /// <summary>
     18     /// HexInput.xaml 的交互逻辑
     19     /// </summary>
     20     public partial class HexInput : UserControl
     21     {
     22         public HexInput()
     23         {
     24             InitializeComponent();
     25             Binding binding = new Binding();
     26             binding.Source = this;
     27             binding.Path = new PropertyPath("HexText");
     28             binding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
     29             binding.Mode = BindingMode.TwoWay;
     30             TB.SetBinding(TextBox.TextProperty, binding);
     31         }
     32         #region DependencyProperty        
     33         public static readonly DependencyProperty HexTextProperty = DependencyProperty.Register(
     34         "HexText",//制定属性的名称
     35         typeof(string), //制定属性的类型
     36         typeof(HexInput),//
     37         new FrameworkPropertyMetadata(""));//设定默认值
     38         public string HexText
     39         {
     40             get { return (string)GetValue(HexTextProperty); }
     41             set { SetValue(HexTextProperty, value); }
     42         }
     43 
     44         public static readonly DependencyProperty AutoNumberProperty = DependencyProperty.Register(
     45         "AutoNumber", typeof(long), typeof(HexInput),new FrameworkPropertyMetadata((long)2));
     46         public long AutoNumber
     47         {
     48             get { return (long)GetValue(AutoNumberProperty); }
     49             set { SetValue(AutoNumberProperty, value); }
     50         } 
     51         #endregion
     52 
     53         //private void TB_PreviewTextInput(object sender, TextCompositionEventArgs e)
     54         //{
     55         //    if(!("0123456789ABCDEF".Contains(e.Text.ToUpper())))
     56         //        e.Handled=true;
     57         //}
     58 
     59         //private void TB_TextChanged(object sender, TextChangedEventArgs e)
     60         //{
     61         //    if (!(sender as TextBox).IsFocused)
     62         //    {
     63         //        string s = (sender as TextBox).Text;
     64         //        FormatHex(ref s);
     65         //        (sender as TextBox).Text = s;
     66         //    }
     67         //}
     68 
     69         private void TB_LostFocus(object sender, RoutedEventArgs e)
     70         {
     71             string s = TB.Text;
     72             FormatHex(ref s);
     73             TB.Text = s;
     74         }
     75 
     76         private void TB_PreviewKeyDown(object sender, KeyEventArgs e)
     77         {
     78             if (false
     79                 || e.Key == Key.Space
     80                 )
     81                 e.Handled = true;
     82         }
     83 
     84         private void TB_PreviewTextInput(object sender, TextCompositionEventArgs e)
     85         {
     86             int p = (sender as TextBox).SelectionStart;
     87             int pl = (sender as TextBox).SelectionLength;
     88             string s = (sender as TextBox).Text;
     89             if ("0123456789ABCDEF".Contains(e.Text.ToUpper()))
     90             {
     91                 //s=s.Remove(p+1,pl-1)
     92                 if (p == s.Length)
     93                 {
     94                     s = p == 0 ? s + e.Text + "0" : s + " " + e.Text + "0";
     95                     p = p == 0 ? p : p + 1;
     96                 }
     97                 else
     98                 {
     99                     //如果空格结尾会有索引越界情况
    100                     if (s.Substring((sender as TextBox).SelectionStart, 1) == " ")
    101                     {
    102                         p = p + 1;
    103                     }
    104                     s = s.Remove(p, 1);
    105                     s = s.Insert(p, e.Text);
    106                 }
    107             }
    108             (sender as TextBox).Text = s;
    109             (sender as TextBox).SelectionStart = p + 1;
    110             e.Handled = true;
    111         }
    112 
    113         private void TB_TextChanged(object sender, TextChangedEventArgs e)
    114         {
    115             int p = (sender as TextBox).SelectionStart;
    116             string s = (sender as TextBox).Text;
    117             FormatHex(ref s);
    118             (sender as TextBox).Text = s;
    119             (sender as TextBox).SelectionStart = p;
    120             //HexText = TB.Text.Replace(" ", "");
    121         }
    122 
    123         private void FormatHex(ref string s,bool b=true)
    124         {
    125             s = s.Replace(" ", "");
    126             //s = ((s.Length % AutoNumber) == 0) ? s : (s + "0");
    127             if (s.Length >= 128)
    128                 s = s.Substring(0, 128);
    129             if(b)
    130             {
    131                 for (int i = ((int)AutoNumber - s.Length % (int)AutoNumber) % (int)AutoNumber; i > 0; i--) 
    132                 {
    133                     s = s + "0";
    134                 }
    135             }
    136             int l = s.Length;
    137             int n = (l-2) / 2;
    138             for (int i = n; i > 0; i--)
    139             {
    140                 s = s.Insert(2 * i, " ");
    141             }
    142             s = s.ToUpper();
    143         }
    144 
    145 
    146     }
    147 }
    <vi:HexInput 
    AutoNumber="8"  
    HexText="{Binding Model.P_option, Mode=TwoWay, 
    Converter={StaticResource String2HexStringConverter2}}" />

  • 相关阅读:
    第二章 Java浮点数精确计算
    第一章 Java代码执行流程
    第九章 JVM调优推荐
    第八章 JVM性能监控与故障处理工具(2)
    基于Redis构建10万+终端级的高性能部标JT808协议的Gps网关服务器(转)
    基于Java Netty框架构建高性能的Jt808协议的GPS服务器(转)
    Netty(七):流数据的传输处理
    Java中的位运算符
    二进制(原码、反码、补码)
    Java数据结构和算法(二):数组
  • 原文地址:https://www.cnblogs.com/xiaoboz/p/2984646.html
Copyright © 2011-2022 走看看