zoukankan      html  css  js  c++  java
  • WPF 中自定义控件及其使用

    主要有4个步骤:

    1. 首先创建一个自定义的控件,该控件继承 TextBox

    namespace Presentation.Common
    {
        /// <summary>
        /// 数字框,继承文本框,仅限数字输入,扩展 Value(decimal)
        /// </summary>
        public class ExNumericBox:TextBox
        {
            #region Dependency properties
            public int Digits
            {
                get { return (int)GetValue(DigitsProperty); }
                set { SetValue(DigitsProperty, value); }
            }
     
            public static readonly DependencyProperty DigitsProperty = DependencyProperty.Register("Digits", typeof(int), typeof(ExNumericBox), new PropertyMetadata(2));
     
            public decimal Value {
                get { return (decimal)GetValue(ValueProperty); }
                set { SetValue(ValueProperty,value); }
            }
     
            public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(decimal), typeof(ExNumericBox), new PropertyMetadata(decimal.Zero));
            
            #endregion
            public ExNumericBox()
                :base()
            {
                this.VerticalContentAlignment = VerticalAlignment.Center;
                this.TextChanged += new TextChangedEventHandler(NumericBox_TextChanged);
            }
     
            private string backupString = "";
            /// <summary>
            ///
            /// </summary>
            /// <param name="sender"></param>
            /// <param name="e"></param>
            private void NumericBox_TextChanged(object sender, TextChangedEventArgs e)
            {
                TextBox tb = (TextBox)sender;
                string temp = tb.Text.Trim();
                if (!isDecimal(temp))
                {//revert string
                    tb.Text = backupString;
                    tb.Select(backupString.Length, 0);
                    return;
                }
                decimal tempvalue = 0;
                Decimal.TryParse(temp, out tempvalue);
     
                backupString = temp;
                Value = tempvalue;
            }
            /// <summary>
            /// 是否数字
            /// </summary>
            /// <param name="source"></param>
            /// <returns></returns>
            bool isDecimal(string source)
            {
                foreach (char item in source)
                {
                    if ((item < '0' || item > '9'))
                    {
                        if (Digits == 0)
                            return false;
                        if (Digits != 0 && item != '.')
                            return false;
                    }
                }
                return true;
            }
        }
    }

    2.引入前面自定义控件生成的dll;

    3. window 或 usercontrol 类中要使用该控件时先引入命名空间,如:

    xmlns:Common1="clr-namespace:Presentation.Common;assembly=Presentation.Common"

    4.使用控件

     <Common1:ExNumericBox x:Name="tbFirstCost" HorizontalAlignment="Left" Height="22" Margin="38,4,0,4" TextWrapping="Wrap" VerticalAlignment="Center" Width="50" VerticalContentAlignment="Center" Grid.Column="1"/>
  • 相关阅读:
    逆波兰表达式、波兰表达式【数据结构与算法】
    Python下所有所有异常处理办法
    修改jenkins源为国内源
    [sql Server]除非另外还指定了TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询和公用表表达式中无效
    原创 CDH 6.2.1 装 es 怎么配置 master ???
    contos7开启端口,关闭防火墙
    分布式下session共享问题和解决
    伪原创api接口[HTTP]
    AI写作机器人基于GPT-3
    基于AI的自动改写文章的软件
  • 原文地址:https://www.cnblogs.com/DreamRecorder/p/9582514.html
Copyright © 2011-2022 走看看