When two or more MaskInput controls are focused at the same time, the application freezes. Workaround: Instead of txtMask1.Focus(); txtMask2.Focus(); Use txtMask1.Focus(); Dispatcher.BeginInvoke(new Action(() => { txtMask2.Focus(); }), DispatcherPriority.Loaded);
The MaskedNumericInput control doesn't escape formatting characters like 'c' or 'n'. ============= This is not reproducible in R3 2016 version.
Implement a behavior to allow dymanically changing the FormatString precision specifier ===== Reason to mark it Completed: Added the "Dynamic Format String" sample in SDK. Will be live with Q2 2014 (mid June)
MaskedInputExtensions.AllowNull is set to False. Select All then Delete makes the Value 0 and the Text is like "______0.00" (contains 0.00) which is expected (this is in Numeric and CurrencyInput). Second time SelectAll and then delete makes the Value 0 but the text becomes "________" which is not expected. Available in LIB version: 2014.3.1124
When setting the CurrencyDecimalSeparator to "," the MaskedCurrencyInput shows ".," (decimal point is not expected). Similar issues with MaskedNumericInput. Setting both CurrencyDecimalSeparator and CurrencyGroupSeparator to "." also produces issues. Possible workaround: public class CustomCurrency: RadMaskedCurrencyInput { protected override void SetSeparators(params Telerik.Windows.Controls.MaskedInput.Separator[] separatorsArray) { base.SetSeparators(separatorsArray); this.Separators.Add(new Separator(this.Culture.NumberFormat.NumberDecimalSeparator, true)); } } The fix will be available in lib for 11 July 2016.
Use No-Masked TextInput (Mask=""). Pressing delete will always place the caret on position 0.
RadMaskedTextInput with no-mask => Mask="". Selecting part of the value then paste works incorrectly. The selected text is not replaced and it is preserved, the copied text is inserted. It is expected that the selected text is entirely replaced with the copied text.
MaskedInput: The cursor of the Mouse is Caret when it is over the built in ScrollViewer ==== Reason for deletion: The bug is logged for RadMaskedTextBox and it will be removed from our suite from Q2 2014.
Bug details: OS: Windows 10. VS: 2015 professional Telerik version: 2015.2 SP1 Code sample: <Window x:Class="RadMaskedInputBug.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" Title="MainWindow"> <Grid> <telerik:RadTextTimeInput /> </Grid> </Window> The designer crashes and shows only the exception: InvalidOperationException: Can only base on a Style with target type that is base type 'RadMaskedTextInput'. UPDATE: Telerik has submitted a bug report to Microsoft. You can check its progress here: https://connect.microsoft.com/VisualStudio/feedback/details/2005303/designer-error-can-only-base-on-a-style-with-target-type-that-is-base-type-customcontrol-when-a-style-is-basedon-a-style-of-an-abstract-class On 21/12/2015 Microsoft commented that a fix has been submitted and will be available in the next update.
MaskedInput's Value is bound to property of an Entity class. This property has EditableAttribute. MaskedInput's will set IsReadOnly True if the EditableAttribute's AllowEdit is False. Clients need mechanism to stop this validation in MaskedInput.
If there is a whitespace in the Mask of the control and you try to paste a value containing whitespace, the control will trim the user input. Example: Mask="(###) ###-#### User Input: 1234567890 The MaskedText should be: (123) 456-7890 If you copy this input and try to paste it into a control with the same Mask you will get (123) 45-6789 which is not correct. Possible workarounds !!! 1. In a scenario when the user will enter only digits in the MaskedTextInput for a phone number is to restrict the input by setting the following mask. <telerik:RadMaskedTextInput EmptyContent="Enter digits" Mask="(d3) d3-d4" /> 2. The second workaround is to use non breaking space in Mask, this way there won't be a match between space by the user and space in the mask symbols.
The current workaround is to create a custom control and override the OnTextInput method: public class CustomInput : RadMaskedTextInput { protected override void OnTextInput(TextCompositionEventArgs e) { base.OnTextInput(e); e.Handled = true; } }
We set the AutomationProperties.Name property of a RadMaskedInput control. This property is not applied in the control (if checked with the UI Spy) the Name automation property is not the set one, but the control's value. This forces the MS Narrator to read the value of the control instead of the desired one.
Add a property to force only allowing uppercase values, without needing to specify a number of characters or have the underline in the control.
This is achievable in code, but it seems unnecessary to go to such lengths for each instance where it is needed.
private void bankCode_ValueChanging(object sender, Telerik.Windows.Controls.MaskedInput.RadMaskedInputValueChangingEventArgs e)
Pasting values in the controls, clears the current value in order to paste the new content
Initially, when the value is 0, the mask control could look like - $__,___.00 instead of $__,___0.00.
Improve the FlowDirection functionality - at the moment setting the flow direction to RightToLeft, partly inverts the Mask value thus messing it up. We are closing this issue as we do not think this is a bug. MaskedInput's Value , Mask and Text properties are not dependent on the FlowDirection property. The issue the bug is originally logged to is easy to reproduce with TextBox only. <TextBox Text="10-Jul-2015" FlowDirection="RightToLeft" /> will produce the string "Jul-2015-10" but not the reversed string of "10-kul-2015". This is how is awpf framework implementation.
This leads to a wrong value displayed in the masked input. The mask is always coerced to "hh:mm:ss.ff". An additional, 'f' is added to the mask. Probably, this will happen also if you have a single letter on another position in the mask. To work this around you can create a custom masked input control and override its CoerceTextOverride() method. There you can implement some logic that replaces the wrong milliseconds text. Here is an example in code: public class CustomMaskedDateTimeInput : RadMaskedDateTimeInput { protected override string CoerceTextOverride(ref int selectionStart) { var text = base.CoerceTextOverride(ref selectionStart); if (this.Value.HasValue && this.Mask != null && this.Mask.Contains("hh:mm:ss.f")) { int millisecondsAllowedLength = GetAllowedMillisecondsLength(this.Mask); // example: .ff means that there are 2 allowed millisecond chars int millisecondsMaxLength = 3; // max = 999 var milliseconds = this.Value.Value.Millisecond.ToString(); // the original milliseconds give from the value var zeroesCount = millisecondsMaxLength - milliseconds.Length; // how many zeroes should be append before the millseconds string value milliseconds = new string('0', zeroesCount) + milliseconds; // append the zeroes // apply the milliseconds restriction given by the Mask (.ff - two symbols) if (milliseconds.Length > millisecondsAllowedLength) { int charsToRemoveCount = milliseconds.Length - millisecondsAllowedLength; for (int i = 0; i < charsToRemoveCount; i++) { milliseconds = milliseconds.Remove(milliseconds.Length - 1, 1); } } // replace the default parsed millseconds part of the string with the custom milliseconds var millisecondsIndex = text.LastIndexOf(".") + 1; text = text.Remove(millisecondsIndex, millisecondsMaxLength - millisecondsAllowedLength); text = text.Insert(millisecondsIndex, milliseconds); } return text; } private int GetAllowedMillisecondsLength(string mask) { int length = 0; var millisecondsIndex = mask.LastIndexOf(".") + 1; if (millisecondsIndex != -1) { length = mask.Length - millisecondsIndex; } return length; } }
For example, the Mask "hh:mm:ss.ff" will render the value properly. But if you change the value at runtime (by pressing a key on the keyboard), the milliseconds will be re-parsed and will be displayed wrongly. For example, if you have the value "12:13:14.50" and you go to the ".50" part (between the decimal separator and the number 5). And then press 3, the milliseconds will change to ".03". To work this around you can create a custom masked input control and override its CoerceTextOverride() method. There you can implement some logic that replaces the wrong milliseconds text. Here is an example in code: public class CustomMaskedDateTimeInput : RadMaskedDateTimeInput { protected override string CoerceTextOverride(ref int selectionStart) { var text = base.CoerceTextOverride(ref selectionStart); if (this.Value.HasValue && this.Mask != null && this.Mask.Contains("hh:mm:ss.f")) { int millisecondsAllowedLength = GetAllowedMillisecondsLength(this.Mask); // example: .ff means that there are 2 allowed millisecond chars int millisecondsMaxLength = 3; // max = 999 var milliseconds = this.Value.Value.Millisecond.ToString(); // the original milliseconds give from the value var zeroesCount = millisecondsMaxLength - milliseconds.Length; // how many zeroes should be append before the millseconds string value milliseconds = new string('0', zeroesCount) + milliseconds; // append the zeroes // apply the milliseconds restriction given by the Mask (.ff - two symbols) if (milliseconds.Length > millisecondsAllowedLength) { int charsToRemoveCount = milliseconds.Length - millisecondsAllowedLength; for (int i = 0; i < charsToRemoveCount; i++) { milliseconds = milliseconds.Remove(milliseconds.Length - 1, 1); } } // replace the default parsed millseconds part of the string with the custom milliseconds var millisecondsIndex = text.LastIndexOf(".") + 1; text = text.Remove(millisecondsIndex, millisecondsMaxLength - millisecondsAllowedLength); text = text.Insert(millisecondsIndex, milliseconds); } return text; } private int GetAllowedMillisecondsLength(string mask) { int length = 0; var millisecondsIndex = mask.LastIndexOf(".") + 1; if (millisecondsIndex != -1) { length = mask.Length - millisecondsIndex; } return length; } }