c# - 带有尾随“。”的 WPF DependencyProperty 问题。
问题描述
我遇到了自定义控件依赖属性的问题。该控件基本上是一个带有下拉小键盘的文本框。
当用户按下小键盘上的按钮时,文本将附加到 InputValue 依赖属性。一切都按预期工作,直到我尝试附加一个“。” 到财产价值。集合中的“值”变量仍然有“。” (例如:“1.”)但在 SetValue 之后,InputValue 没有“.” (例如:“1”)
代码如下 - OnInputValueChanged 只是检查控件是否是特定类型的输入,如果是,当字符串达到一定长度时,关闭小键盘。
public static readonly DependencyProperty InputValueProperty = DependencyProperty.Register("InputValue", typeof(String), typeof(TextBoxTouchNum), new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender | FrameworkPropertyMetadataOptions.AffectsParentArrange, new PropertyChangedCallback(OnInputValueChanged)));
public String InputValue
{
get => (String)GetValue(InputValueProperty);
set
{
SetValue(InputValueProperty, value);
}
}
public static void OnInputValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
TextBoxTouchNum ctrl = (TextBoxTouchNum)d;
String val = (String)ctrl.InputValue;
if (val != null && ctrl.IsHeatNoEntry && val.Trim().Length == 8)
if (ctrl.IsTouchScreen && ctrl.NumPadVisible)
{
ctrl.NumPadVisible = false;
Keyboard.ClearFocus();
}
}
如果我替换小数点按钮的代码以添加不同的东西,如“.0”,我最终会得到“1.0”,但一旦我回到尾随的 0,小数点又消失了。
按钮单击处理程序代码是:
private void Decimal_Click(object sender, RoutedEventArgs e)
{
InputValue += ".";
}
private void Num0_Click(object sender, RoutedEventArgs e)
{
InputValue += "0";
}
重复 0-9 按钮
Xaml 绑定:
<TextBox x:Name="TextBoxValue"
Width="{Binding TextBoxWidth}"
Text="{Binding InputValue, RelativeSource={RelativeSource AncestorType=UserControl}}"
materialDesign:HintAssist.Hint="{Binding Hint}"
Style="{StaticResource MaterialDesignFloatingHintTextBox}"
TextAlignment="Center"
VerticalAlignment="Center"
Background="Transparent" />
在我看来,该值正在某处转换为数字并放弃训练“。”。
任何建议,将不胜感激!
解决方案
如果该依赖属性绑定到数字类型并UpdateSourceTrigger
设置为PropertyChanged
,则输入 dot(decimal sign) 将立即设置该属性,并且 get 属性将被回调到 UI 导致不可见 dot(decimal sign)。
一种方法是延迟UpdateSourceTrigger
to LostFocus
,但我认为这是不可能的,因为您在后面的代码上分配了它。
因此,您唯一的选择是将其绑定到数字类型并将其保留为字符串类型。
推荐阅读
- c++ - gtest:检查字符串是否等于两个字符串之一
- java - Tomcat:使用 https 时出现附件错误
- vb.net - 在 TextBox 控件中工作但在 Form Paint 事件中不工作的拉绳自定义字体
- javascript - 使用列表中的函数名称进行函数链接
- kubernetes - helm yaml 错误 - 发现意外的“:”
- java - 如何在 android studio 的弹出窗口内添加滚动的 listView?
- c# - C# xmldoc 到文档页面
- sql - MS SQL Server 2017 中的日期转换
- css - 动画翻译右箭头
- c++ - 测试树是否为二叉搜索树