我在设置编辑器控件的掩码时遇到问题。我正在编写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}
时相同的问题。我也玩过格式,但它只会影响不在编辑模式时显示数字的方式。
答案 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>
试一试并修改以满足您的独特需求