WPF开发txt阅读器17:用户控件binding和文本内容限制

news/2024/11/14 20:14:19/

文章目录

    • 属性绑定
    • 文本回车事件
    • 限定文本内容

txt阅读器系列:

  • 需求分析和文件读写
  • 目录提取类💎列表控件与目录💎快捷键翻页
  • 字体控件绑定💎前景/背景颜色
  • 书籍管理系统💎用树形图管理书籍
  • 语音播放💎播放进度显示💎快进快退💎语速音量
  • 文本清理的布局💎段落合并💎编码检测

属性绑定

除了语速音量之外,阅读设置中的字体大小用到的也是这种TextBox, Slider, Button的组合形式,故而也可将这个新控件应用到字体尺寸的设置上。

但由于字体尺寸会直接绑定txtFontSize属性,而刚刚创建的AdvanceSlider尽管可以注册事件,但还不能支持Binding用法。为此,可修改有关Value的设置

[Bindable(true)]
public double Value { set; get; }
public static readonly DependencyProperty ValueProperty =DependencyProperty.Register("Value", typeof(double), typeof(Control),new PropertyMetadata(0.0));

其中,[Bindable(true)]表示Value参数支持Binding语法,然后通过DependencyProperty来注册Value参数,从而赋予其实际的绑定功能。

DependencyProperty.Register共有4个输入参数,其中"Value"为准备注册的属性名字,然后接下来的两个类型,分别是该属性的类型,以及该属性所有者的类型。最后new PropertyMetadata(0.0),通过一个浮点型的0.0创建了一个元数据。

然后,AdvanceSlider就可以完全应用在字体尺寸中了。

文本回车事件

AdvanceSlider目前还有一个问题,即TextBox仍然是允许输入数值的,但其输入将不起任何作用,这一点显得很呆。为此,可以为TextBox注册一个回车事件

<TextBox Width="50" Height="20" Text="{Binding Value, ElementName=slider}" KeyDown="txt_KeyDown"/>

C#代码为

private void txt_KeyDown(object sender, KeyEventArgs e)
{if (e.Key != Key.Enter)return;TextBox tb = sender as TextBox;double v;if(!double.TryParse(tb.Text, out v)){tb.Text = Value.ToString();return;}if (v > Max)v = Max;else if(v< Min)v = Min;slider.Value = v;
}

其逻辑是,当文本框中输入的内容可以转换为double类型时,将其转换后的值赋给slider.Value。但是,如果这个值超出了slider.Value的范围,那么就就近设为边界。

限定文本内容

另一个问题是,文本中输入了不合法的参数,比如输入一二三,是没办法转换成浮点数的。为此,可以直接拒绝在文本框中输入非数字的字符:首先更改文本控件

<TextBox Width="50" Height="20" Text="{Binding Value, ElementName=slider}" KeyDown="txt_KeyDown"InputMethod.IsInputMethodEnabled =" False"PreviewTextInput ="limitNumber"/>

其中,InputMethod.IsInputMethodEnabled属性用于禁用系统输入法,limitNumber则用于限定文本框中的内容,具体实现为

public void limitNumber(object sender, TextCompositionEventArgs e)
{Regex re = new Regex(@"[^0-9\-]");e.Handled = re.IsMatch(e.Text);
}

其中new Regex是一个正则表达式,表示仅限于输入数字0-9和负号-


http://www.ppmy.cn/news/511761.html

相关文章

QGIS根据行政区边界,批量裁剪栅格

要使用QGIS编程实现根据行政区边界批量裁剪栅格&#xff0c;可以利用PyQGIS库来完成。 from qgis.core import QgsRasterLayer, QgsProject, QgsRectangle # 设置行政区边界文件路径 boundary_file /path/to/admin_boundary.shp # 设置待裁剪的栅格文件夹路径 input_folder …

ipad触摸测试软件,平板电脑屏幕灵敏度测试:iPad系列最出色

【搜狐数码消息】10月10日消息&#xff0c;在发布了有关手机屏幕灵敏度的测试结果之后&#xff0c;Agawi的研究人员最近就对平板电脑的触控灵敏度进行了一次测试。结果发现&#xff0c;苹果iPad和iPad mini是所有平板电脑当中屏幕灵敏度最高的&#xff0c;超过了Android平板以及…

苹果平板爱思助手检验安兔兔

苹果平板爱思助手检验安兔兔 基本的检测机子的真伪&#xff0c;是不是水货 沙漏验机助手爱思助手7.0安兔兔跑分28万以上淘宝gsx 查询序列号 查看激活策略&#xff0c;淘宝上基本上20左右一次 电池寿命 苹果铅笔型号 鲁大师检测 爱思助手测试 沙漏验机助手测试 安兔兔测评 故障…

Android手机哪个悬浮好用,安卓手机哪个悬浮窗便签好,是否支持云服务便签?...

原标题&#xff1a;安卓手机哪个悬浮窗便签好&#xff0c;是否支持云服务便签&#xff1f; 安卓系统的手机品牌有很多&#xff0c;常见的比如有华为、小米、OPPO、vivo、魅族等等&#xff0c;这些手机上无一例外都有手机便签的功能&#xff0c;打开便签(备忘录)程序后&#xff…

手机进程设置多少个最好_手机卡顿和耗电,1秒关闭这8个设置,流畅到2025年,网友:真心强...

阅读本文前&#xff0c;请您先点击上面的“蓝色字体”&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到文章了。每天都会有分享&#xff0c;都是免费订阅&#xff0c;请您放心关注。 …

邮箱哪个好?手机邮箱下载渠道

本人自己也用过许多邮箱&#xff0c;但也不敢说哪个邮箱最好&#xff0c;国内众多邮箱中&#xff0c;基本功能都是一样的&#xff0c;只有少许功能是有差异的&#xff0c;我最近刚刚用的TOM企业邮箱&#xff0c;其中大附件功能就很让我中意&#xff0c;带大家一起看看吧&#x…

C语言经典一百题(六)用*号输出字母C的图案。

用*号输出字母C的图案。 #include<stdio.h> int main() {printf("*****\n");printf("*\n");printf("*\n");printf("*\n");printf("*****");return 0; }

安卓adb在拨号键盘上输入井号(#)星号(*)

安卓系统下由于#号是属于内定字符&#xff0c;需要转义为%23 第一种方式&#xff1a; adb shell service call phone 1 s16 “%23” 第二种方式&#xff1a; adb shell am start -a android.intent.action.DIAL -d tel:%23 如果拨号则为&#xff1a; adb shell am start -a and…