编辑值时,XamCurrencyEditor掩码保持“零”

时间:2014-10-29 12:41:30

标签: wpf infragistics

我在设置编辑器控件的掩码时遇到问题。我正在编写WPF格式,并且有问题的控件是Infragistics XamCurrencyEditor。

我设置了以下样式来处理每个XamCurrencyEditor的掩码:

<Style x:Key="ValidatedCurrencyFieldStyleInline" TargetType="{x:Type igEditors:XamCurrencyEditor}"
       BasedOn="{StaticResource ValidatedFieldStyleInline}">
    <Setter Property="Mask" Value="{}{double:-9.4}"/>
</Style>

我按以下方式应用样式:

<igEditors:XamCurrencyEditor Grid.Column="0" Style="{StaticResource ValidatedCurrencyFieldStyleInline}"
                                 Value="{Binding Path=UnearnedPremiums, ValidatesOnDataErrors=True}" IsReadOnly="{Binding Path=IsLocked}" />

默认情况下,如果没有值,编辑器会显示&#34; 0.0000&#34;我很高兴。当我单击编辑器(进入编辑模式)时,它会一直显示&#34; 0.0000&#34;。这也没关系。

现在我的问题:我正在选中控件,或点击一次。当我开始输入一个数字时,比如123456789876,它会保留第一个零并且不会覆盖它。所以结果实际上是123456780.9876。保持&#34; 0&#34;在第一个位置有点不直观。我想要实现的是这个结果:123456789.8760

这听起来微不足道,但我尝试了掩码和格式属性的不同组合,{double:-9.4}最接近我想要实现的目标。

我也试过了"999999999.9999"但是后来不可能使用负数(负面模需要使用&#34; n&#34;格式);此格式在进入编辑模式时也会隐藏现有数字。当我应用"nnnnnnnnn.nnnn"时,我遇到与应用{double:-9.4}时相同的问题。我也玩过格式,但它只会影响不在编辑模式时显示数字的方式。

1 个答案:

答案 0 :(得分:1)

您可以尝试设置SelectionStart的设置位置。它是否依赖于您单击的编辑器中的WHERE,即。什么职位?我必须对代码隐藏中的一些XamCurrencyEditor控件执行此操作(这应该是可接受的MVVM,因为它是视图内容):

<igEditors:XamCurrencyEditor  Margin="0"
                Value="{Binding SelectedItem.VendorBalanceDefaultThreshold, UpdateSourceTrigger=PropertyChanged, ValidatesOnDataErrors=True, Mode=TwoWay}"
                                         Style="{StaticResource MoneyStyle}" Theme="[Current]"
                                         ValueType="{x:Type sys:Decimal}" PromptChar=" " InvalidValueBehavior="RevertValue"
                                         ClipMode="Raw" DisplayMode="IncludeBoth" SelectAllBehavior="SelectEnteredCharacters"
                                         NullText="Value Required" SpinButtonDisplayMode="MouseOver"
                                         GotFocus="XamCurrencyEditorGotFocus" PreviewMouseDown="XamCurrencyEditor_PreviewMouseDown" >
                </igEditors:XamCurrencyEditor>

和代码隐藏:

private void XamCurrencyEditor_PreviewMouseDown(object sender, MouseButtonEventArgs e)
    {
        XamCurrencyEditor currencyEditor = sender as XamCurrencyEditor;

        if (currencyEditor != null)
        {
            if (!String.IsNullOrEmpty(currencyEditor.Text))
            {
                if (currencyEditor.SelectionStart < 11)
                {
                    currencyEditor.SpinIncrement = 1;
                }
                else
                {
                    currencyEditor.SpinIncrement = 0.01;
                }
            }
        }
    }

private void XamCurrencyEditorGotFocus(object sender, RoutedEventArgs e)
    {
        XamCurrencyEditor currencyEditor = sender as XamCurrencyEditor;

        if (currencyEditor != null)
        {
            if (!String.IsNullOrEmpty(currencyEditor.Text))
            {
                currencyEditor.SelectAll();
                if (currencyEditor.SelectionStart < 11)
                {
                    currencyEditor.SpinIncrement = 1;
                }
                else
                {
                    currencyEditor.SpinIncrement = 0.01;
                }
            }
        }
    }

风格:

<Style TargetType="{x:Type igEditors:XamCurrencyEditor}" x:Key="MoneyStyle">
    <Setter Property="Mask" Value="{}{currency:-8.2:c}" />
</Style>

试一试并修改以满足您的独特需求