UWP 中有小时、分钟和秒的时间控制吗?

Any time control with hours, minutes and seconds in UWP?

我想要一个时间选择器控件,我可以在其中设置小时、分钟和秒。默认的时间选择器控件不包含秒。在时间选择器控件中获得秒值的最简单方法是什么?

内置TimePicker确实不支持秒输入。您可以子类化 TimePicker 并手动扩展它以支持这种情况,但这可能非常复杂,因为您不仅必须修改控件本身的模板,而且还必须编辑 TimePickerFlyoutPresenter 支持秒输入。甚至可能根本不可能,而且可能有点矫枉过正。

我认为更好更简单的解决方案是使用 Windows 社区工具包 的一部分 TextBoxMask extension。这允许您定义 TextBox 的自定义格式,它可能如下所示:

<TextBox extensions:TextBoxMask.CustomMask="5:[0-5]"
                     extensions:TextBoxMask.Mask="99:59:59" />

TextBox 将支持 hh:mm:ss 格式的输入。默认情况下,Mask 支持字符 a 用于字母,9 用于数字 0-9 和 * 用于任何字符。您可以使用 CustomMask 定义自定义掩码字符,这是我在这里所做的,以确保几十分钟和几秒钟限制在五十 (00-59)。

另一种解决方案可能是创建一个自定义控件,将普通的内置 TimePickerTextBox 组合在一起仅需几秒钟,但我认为 TextBoxMask 更好,用户友好的解决方案。

(+ 1) 马丁·齐克蒙德

我只想改进一下 Martin Zikmund 的回答。

MSDN

TextBox Mask property has 3 build in variable characters

'a' which represents [a-Z] '9' which represents [0-9] '*' which represents a or 9

24 小时格式:

XAML

<TextBox ui:TextBoxExtensions.CustomMask="0:[0-2],1:[0-9],5:[0-5]" 
         ui:TextBoxExtensions.Mask="01:59:59" x:Name="tbTime" TextChanged="tbTime_TextChanged"/>

代码

private void tbTime_TextChanged(object sender, TextChangedEventArgs e)
{
   var textBox = (TextBox)sender;
   string textBoxText = textBox.Text; 
          
   if (IsValidTimeFormat(textBoxText))
   {
      // Yep
   }
   else
   {
      // Nope
   }
}

// Check if the string is valid TimeSpan
public bool IsValidTimeFormat(string input)
{
     TimeSpan dummyOutput;
     return TimeSpan.TryParse(input, out dummyOutput);
}

ui:TextBoxExtensions.CustomMask="0:[0-2],1:[0-9],5:[0-5]"的解释 和 ui:TextBoxExtensions.Mask="01:59:59"

0:[0-2] 表示我们在任何地方插入 0(零) ui:TextBoxExtensions.Mask="01:59:59" 允许输入数字0-2.

事实上,0 可以是任何字符或数字,因为它就像一个变量名。所以你可以输入 3:[0-2] 并在这里使用它 ui:TextBoxExtensions.Mask="31:59:59".