带有尾随“。”的 WPF DependencyProperty 问题。

Posted

技术标签:

【中文标题】带有尾随“。”的 WPF DependencyProperty 问题。【英文标题】:WPF DependencyProperty issue with trailing "." 【发布时间】:2020-08-22 23:25:06 【问题描述】:

我遇到了自定义控件依赖属性的问题。该控件基本上是一个带有下拉小键盘的文本框。

当用户按下数字键盘上的按钮时,文本将附加到 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" />

在我看来,该值正在某处转换为数字并放弃训练“。”。

任何建议将不胜感激!

【问题讨论】:

我的猜测是您的下拉值是没有点的数字。向我们展示下拉代码,以及如何设置值。这将有助于确定出了什么问题。 添加了按钮单击处理程序代码和图像以进行说明 在 xaml 中将此 DependencyProperty 绑定到哪里? 从您发布的代码和信息来看,很明显在绑定InputValue 时会发生修改,我猜想是TextBox.Text。是否涉及任何转换器或附加属性/行为? OnInputValueChanged 内部发生了什么? 另外,如果我从键盘而不是屏幕小键盘输入数字并留下一个尾随点,它也会将其删除 【参考方案1】:

如果该依赖属性绑定到数字类型并且UpdateSourceTrigger 设置为PropertyChanged,则输入点(十进制符号)将立即设置该属性,并且 get 属性将被回调到 UI 导致没有点(十进制标志)可见。

一种方法是将UpdateSourceTrigger 延迟到LostFocus,但我认为这是不可能的,因为您在后面的代码中分配它。

所以你唯一的选择是不要将它绑定到数字类型并保持在字符串类型。

【讨论】:

以上是关于带有尾随“。”的 WPF DependencyProperty 问题。的主要内容,如果未能解决你的问题,请参考以下文章

创建一个带有前导/尾随褪色边缘的 UIView

带有 nginx 的 Gatsby - 重定向被破坏 - 尾随 /(斜杠)

无法删除 Windows 7 上带有尾随空格的文件夹 [关闭]

通常如何在 react-bootstrap 或 bootstrap 中显示带有尾随空格的变量?

JS:将带有尾随零的数字替换为科学记数法

如何将带有尾随x的数字字符串转换为无符号数字列表