【发布时间】:2015-10-10 00:03:49
【问题描述】:
我创建了 Coverter,它作为 TextBoxes 的仅数字验证。 一切都很好,我在几个地方使用它,但有一个地方它不起作用,我调试了它,它在一开始就可以工作,就像它是 OneTime 模式一样。
转换器:
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var val = value.ToString();
return (string.IsNullOrEmpty(val) ? "" : ( (val.Substring(val.Length - 1).Equals(",") && val.Count(x => x == ',') < 2) || char.IsDigit(System.Convert.ToChar(val.Substring(val.Length - 1))) ? val : val.Substring(0,val.Length-1)));
}
我不知道这是否重要,但一次在 Window 中使用,第二次在 Page 中使用,但在 Page 中不起作用。 页面:
<TextBox Name="PeselTextBox"
Margin="2,5"
Width="70"
VerticalAlignment="Center"
Text="{Binding ElementName=PeselTextBox,
Path=Text,
Mode=OneWay,
UpdateSourceTrigger=PropertyChanged,
Converter={StaticResource NumberValidationConverter}}"/>
在 Window 中也是一样的。 试图寻找解决方案,但我就是不明白这个错误。
【问题讨论】:
-
附带说明:您的验证至少在以下两种情况下不起作用:复制和粘贴和移动在实际输入之前插入插入符号 - 并不假定它始终保留在 TextBox 的末尾。我已经在 Window 中尝试过您的代码并且 Binding 有效(不仅仅是一次),所以听到它不适用于 Page 很奇怪。
-
Binding指的是定义元素本身。为什么? -
@KingKing 它实际上可以在其他页面中使用,只是在这个页面中没有。