今天分享一下如何实现带递增递减按钮的TextBox控件
1、之前的博客分享了一篇自定义XamlIcon控件的文章,这次就直接在那个项目的基础上实现今天这个自定义控件
2、首先添加两个图标资源,一个增加的按钮,一个减小的按钮,具体过程可以参考我之前写的文章
3、接着新增一个自定义控件,如图所示那个
4、添加后,项目中还会生成一个Themes文件夹,里面还有一个Generic.xaml的文件,这个文件可以用来写控件样式的,里面会自动生成一个最基础的控件样式,而那个NumberTextBox是用来后后台逻辑的
5、先来把控件的样式编写一下,如下,样式具体细节就不在描述,就是在里面添加了两个自定义的XamlIcon控件来作为递增和递减按钮,然后还添加了一个TextBlock来做提示文本
6、接着就是编写后台部分代码,后台部分代码也比较简单,这里简单的添加了两个依赖属性,一个是递进值,一个是最小值。然后就是在OnApplyTemplate的重载中去给样式那里添加的两个控件添加鼠标点击事件。就先这样基础的实现先,复杂的功能后续在增加进去,比如限制只能输入数字之类的,今天主要先介绍实现的大致方法。
public class NumberTextBox : TextBox
{
public int Step
{
get { return (int)GetValue(StepProperty); }
set { SetValue(StepProperty, value); }
}
public static readonly DependencyProperty StepProperty =
DependencyProperty.Register("Step", typeof(int), typeof(NumberTextBox), new PropertyMetadata(1));
public int Minimum
{
get { return (int)GetValue(MinimumProperty); }
set { SetValue(MinimumProperty, value); }
}
public static readonly DependencyProperty MinimumProperty =
DependencyProperty.Register("Minimum", typeof(int), typeof(NumberTextBox), new PropertyMetadata(0));
static NumberTextBox()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(NumberTextBox), new FrameworkPropertyMetadata(typeof(NumberTextBox)));
}
public NumberTextBox()
{
InputMethod.SetIsInputMethodEnabled(this, false);
}
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
XamlIcon DeButton = (XamlIcon)this.Template.FindName("DeButton", this);
XamlIcon InButton = (XamlIcon)this.Template.FindName("InButton", this);
DeButton.MouseLeftButtonDown += DeButton\_MouseLeftButtonDown;
InButton.MouseLeftButtonDown += InButton\_MouseLeftButtonDown;
}
private void DeButton\_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (!String.IsNullOrEmpty(this.Text))
{
this.Text = int.Parse(this.Text) - Step < Minimum ? Minimum + "" : int.Parse(this.Text) - Step + "";
this.SelectionStart = this.Text.Length;
}
else
{
this.Text = Minimum + "";
this.SelectionStart = this.Text.Length;
}
}
private void InButton\_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
if (!String.IsNullOrEmpty(this.Text))
{
this.Text = int.Parse(this.Text) + Step + "";
this.SelectionStart = this.Text.Length;
}
else
{
this.Text = Minimum + "";
this.SelectionStart = this.Text.Length;
}
}
}
7、测试控件功能,主界面添加自定义好的控件,如下
8、实现效果如下,基础功能已经算实现了,但还不完善,有需要的可以自己完善完善,今天的分享就到这了
手机扫一扫
移动阅读更方便
你可能感兴趣的文章