c# - UWP 的格式化文本框
问题描述
我想知道是否有人对如何为时间输入(hh:mm:ss)以及以度、分、秒(dd°mm'ss")为单位的坐标设置文本框格式有任何建议。我很清楚你可以通过 String.Format() 方法设置字符串的格式....这确实给了我在文本框中所需的布局,但我想要一个锁定了适当符号的控件,并将自动标记这些符号作为用户给出他们的输入。
我一直在寻找一种在 C#/UWP 中执行此操作的方法,但没有成功,如果有人有任何建议或可以指出我正确的方向,我将不胜感激。
解决方案
UWP Community Toolkit有一些非常好的控件,它们易于集成,其中之一是TextBox Mask控件,它非常适合您的场景。
您还可以尝试TextBoxRegex控件,它不是您想要的安静,但确实是您在继续之前应该检查的东西。
如果您在集成控件以满足您的特定要求时遇到困难,请与我们联系。
或者,您可以下载 UWP 工具包的示例应用程序,以了解所有可用的控件/工具。(UWP 社区工具包示例应用程序)
编辑 1:您可能已经注意到,选项卡的默认行为是将焦点设置到下一个控件。因此,拥有单个控件并不理想,因为按下tab时,您的文本框将失去焦点,您需要更新文本并将焦点设置回文本框。
一种相对简单的方法如下:
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center" BorderThickness="1">
<StackPanel.BorderBrush>
<SolidColorBrush Color="{ThemeResource SystemBaseHighColor}"/>
</StackPanel.BorderBrush>
<TextBox x:Name="hour" MaxLength="2" BorderBrush="{x:Null}" VerticalAlignment="Center" HorizontalAlignment="Center" LostFocus="hour_LostFocus"></TextBox>
<TextBlock Text=":" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="minute" MaxLength="2" BorderBrush="{x:Null}" HorizontalAlignment="Center" VerticalAlignment="Center" LostFocus="minute_LostFocus"></TextBox>
<TextBlock Text=":" HorizontalAlignment="Center" VerticalAlignment="Center"></TextBlock>
<TextBox x:Name="second" MaxLength="2" BorderBrush="{x:Null}" HorizontalAlignment="Center" VerticalAlignment="Center" LostFocus="second_LostFocus"></TextBox>
</StackPanel>
这基本上是您的自定义构建控件/用户控件。这样当用户退出时,它会移动到堆栈面板内的下一个文本框,依此类推。
在您的hour_LostFocus
事件中,您可以验证文本框的当前值并附加 0 并进行其他验证。
private void hour_LostFocus(object sender, RoutedEventArgs e)
{
string val = (sender as TextBox).Text;
Regex regex = new Regex(@"^([0[0-9]|1[0-9]|2[0-3])$");
Match match = regex.Match(val);
if (!match.Success)
{
//append 0 and other validations
}
}
这同样适用于分钟和秒......只是在这些情况下正则表达式会有所不同。
推荐阅读
- python - Does Python tuple(set()) maintains order?
- java - 如何转换地图
> 到地图 在 Java 8 中 - python - pydoop cp 方法 - 如何指定关键字参数“错误”
- javascript - 如何在 CSS/JavaScript 中模仿触摸光标(圆圈)?
- css - 使用 Tailwind CSS 反应过渡组
- omnet++ - 比较传感器节点接收的数据和传递到应用层的总数据
- r - 使用标头参数时的Openxlsx问题
- python - PCA 散点图上的轴是什么?
- npm - GitHub 操作:将 vue-cli-service 构建的输出部署到 Azure 应用服务
- vue.js - 为什么 Vuetify Autocomplete 不选择正在设置的数据?