Approved
Last Updated: 30 Aug 2019 11:17 by ADMIN
When using MvvmCross framework to load data when the View appears on the screen the ListView cannot be scrolled. It starts jumping rapidly instead.

Workaround:
Load the data in the constructor of the respective ViewModel instead inside its ViewAppearing() method.
Won't Fix
Last Updated: 29 Aug 2019 06:27 by ADMIN
Workaround for GroupHeaderTemplate:

<grid:RadDataGrid.GroupHeaderTemplate>
    <DataTemplate>
        <Label Text="{Binding Group.Key}"/>
    </DataTemplate>
</grid:RadDataGrid.GroupHeaderTemplate>


Workaround for column:

<telerikDataGrid:DataGridTemplateColumn HeaderText="Name" >
    <telerikDataGrid:DataGridTemplateColumn.CellContentTemplate>
        <DataTemplate>
            <Label Text="{Binding Name}"/>
        </DataTemplate>
    </telerikDataGrid:DataGridTemplateColumn.CellContentTemplate>
</telerikDataGrid:DataGridTemplateColumn>

 
UPDATE:
We have decided not to change the code of the RadDataGrid component in this regard. The root reason for this is the fact that the Skia APIs used to draw the text does not support automatic character fallback. To overcome this issue, people from Skia team have two suggestions. We have tested them out and none of them is applicable for the case of the DataGrid.
First approach slows down the performance of the component to a point where the DataGrid becomes unusable.
Second approach does not fix the problem in all cases.
Having this in mind the best approach for our customers in such cases is to use a TemplateCell with a Label inside it only for the column(s) where they expect symbols to occur. The Xamarin.Forms.Label supports automatic character fallback hence it should properly handle all cases.
Approved
Last Updated: 28 Aug 2019 16:43 by ADMIN
Xamarin.Forms Entry with IsPassword=true does hide the suggestions
Completed
Last Updated: 28 Aug 2019 10:14 by ADMIN
Release 2019.2.708 (R2 2019 minor release)
When there is custom template applied that hosts multiple rows of UI components with total height greater than 44, the template is not measured correctly, leading to wrong visualization.
Approved
Last Updated: 28 Aug 2019 07:43 by ADMIN

If we have a ListView with a CheckBox inside the ItemTemplate and the whole ListView is placed in a Popup control, following the next steps:

1. Open the popup

2. Check and uncheck the CheckBox control in any of the items.

3. Click into the popup and then outside to close it.

NullReferenceException is raised on iOS.

Under Review
Last Updated: 20 Aug 2019 11:46 by ADMIN

Using the RadPieChart and PieSeries (UI for Xamarin v2019.2.802.1 from NuGet), I can currently set the LabelBinding (or LabelFormat or LabelFormatter) to adjust the strings displayed in the labels on the slices of the pie chart, but unlike other chart controls, I currently have no way to modify the styling of those labels like I can in every other chart control I've used from Telerik UI for Xamarin.

It seems to me that it would be best to have more properties on the PieSeries class, like LabelFontSize, LabelFontAttributes, LabelFontFamily, LabelTextColor, and LabelMargin (Label prefix to distinguish from LegendTitleBinding could be kept or discarded as desired on some of these names).

LabelMargin would be particularly helpful to eliminate the UWP situation wherein currently all pie slice labels overlap with the outer lighter ring of the pie chart (see image from UWP).  The others just seem needed to maintain a consistent appearance of charts within an app - if all my chart labels are dark blue and a different font size and style except for the not-style-able black labels in pie charts, that makes pie charts hard to incorporate without looking bad or forcing styling elsewhere to match the pie charts' fixed values.

In Development
Last Updated: 19 Aug 2019 11:05 by ADMIN
Created by: Quentin
Comments: 0
Category: Calendar & Scheduling
Type: Bug Report
1
DisplayDateChanged event is not fired in UWP
In Development
Last Updated: 19 Aug 2019 11:05 by ADMIN
Created by: Anvar
Comments: 0
Category: Calendar & Scheduling
Type: Bug Report
1
On UWP, the RadCalendar's DisplayDate isn't updated when the month's view changes (via user selecting the up/down arrows in the header).
Approved
Last Updated: 19 Aug 2019 09:58 by ADMIN
When display is on high resolution screen (MS surface book screen 3000*2000 with 200% scale) the DataGrid is not resized correctly.  See attachments. 
Declined
Last Updated: 19 Aug 2019 09:29 by ADMIN

Hi,

I have been using Telerik controls for the last 4 years in WPF.  One of the controls widely used is the RadScheduleView in which I manage customer appointments in hair dresser salons.  Recently I tried to implement the same functionality on Mobile Apps using Xamarin.

 

Some of the appointments generated by users contain overlapping times since they are serviced by different employees.  This functionality in WPF is managed perfectly using RadScheduleView.  Now I am using the same data by downloading it into a MobileApp (for now Android App) and reproducing similar appointments but on RadCalendar.  Every time an appointment have overlaps, the way system is recreating it on the calendar is misleading and sometimes appointments are also hidden.

 

The following is a Code snippet that also produce the same results.

Steps to reproduce:

 1. Appointment View module that inherits from Telerik.XamarinForms.Input.Appointment and add additional properties to manage appointments:


 public class AppointmentViewModel : Telerik.XamarinForms.Input.Appointment
    {
        public Int32 PK { get; set; } = -1;
        public String DisplayStartTime
        {
            get
            {
                return StartDate.ToString("HH:mm");
            }
        }
        public String DisplayEndTime
        {
            get
            {
                return EndDate.ToString("HH:mm");
            }
        }
        public double AppointmentDate
        {
            get
            {
                return StartDate.Date.ToOADate();
            }
        }

        public string AppointmentDisplayDate
        {
            get
            {
                return StartDate.Date.ToString("ddd dd MMM");
            }
        }
    }

Note:  To render appointments, I am still using default properties of the class  Telerik.XamarinForms.Input.Appointment,  see point 3.

 

 2. Create Page (XAML) with calendar and a refresh button:


<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             xmlns:telerikPrimitives="clr-namespace:Telerik.XamarinForms.Primitives;assembly=Telerik.XamarinForms.Primitives"
             xmlns:zxing="clr-namespace:ZXing.Net.Mobile.Forms;assembly=ZXing.Net.Mobile.Forms"
             xmlns:telerikInput="clr-namespace:Telerik.XamarinForms.Input;assembly=Telerik.XamarinForms.Input"
             xmlns:telerikGrid="clr-namespace:Telerik.XamarinForms.DataGrid;assembly=Telerik.XamarinForms.DataGrid"
             xmlns:helper="clr-namespace:ProductManager.Helper_Code"
             xmlns:telerikDataControls="clr-namespace:Telerik.XamarinForms.DataControls;assembly=Telerik.XamarinForms.DataControls"
             xmlns:telerikListView="clr-namespace:Telerik.XamarinForms.DataControls.ListView;assembly=Telerik.XamarinForms.DataControls"
             x:Class="ProductManager.Pages.pgAppointments" Appearing="ContentPage_Appearing" Disappearing="ContentPage_Disappearing" >
    <ContentPage.Content>
		<Gride HorizontalOptions="Fill" VerticalOptions="Fill" Margin="0,0">
			<Grid.ColumnDefinitions>
				<ColumnDefinition Width="*"/>
			</Grid.ColumnDefinitions>
			<Grid.RowDefinitions>
				<RowDefinition Height="*" />
				<RowDefinition Height="Auto" />
			</Grid.RowDefinitions>
			
			 <telerikInput:RadCalendar x:Name="cntAppoints"
				Grid.Row="0"
				VerticalOptions="Fill" HorizontalOptions="Fill"
				GridLinesDisplayMode="Show" 
				ViewMode="Day"
				 DisplayDateChanged="CntAppoints_DisplayDateChanged"   
				SelectionMode="Single" SelectionChanged="CntAppoints_SelectionChanged" 
				NativeControlLoaded="CntAppoints_NativeControlLoaded"  
				TimeSlotTapped="CntAppoints_TimeSlotTapped"
				ViewChanged="CntAppoints_ViewChanged" CellTapped="CntAppoints_CellTapped" 
				SchedulingUiEnabled="True" AppointmentTapped="CntAppoints_AppointmentTapped"                  >
				<telerikInput:RadCalendar.DayViewSettings>
					<telerikInput:DayViewSettings DayStartTime="00:00:00"
									  DayEndTime="23:40:00"
									  TimelineInterval="15"  />
				</telerikInput:RadCalendar.DayViewSettings>
				<telerikInput:RadCalendar.DayViewStyle>
					<telerikInput:DayViewStyle  
					   
									   AllDayAppointmentFontSize="10"
									   TimelineLabelsTextColor="DarkGray"
									   TimelineLabelsFontSize="10"
									   AppointmentFontSize="10" 
									   AppointmentDetailsFontSize="8"/>
				</telerikInput:RadCalendar.DayViewStyle>
				<telerikInput:RadCalendar.MultiDayViewSettings>
					<telerikInput:MultiDayViewSettings DayStartTime="00:00:00"
									  DayEndTime="23:40:00"
									  TimelineInterval="15"  />
				</telerikInput:RadCalendar.MultiDayViewSettings>
				<telerikInput:RadCalendar.MultiDayViewStyle>
					<telerikInput:MultiDayViewStyle
					   
									   AllDayAppointmentFontSize="10"
									   TimelineLabelsTextColor="DarkGray"
									   TimelineLabelsFontSize="10"
									   AppointmentFontSize="10" 
									   AppointmentDetailsFontSize="8"/>
				</telerikInput:RadCalendar.MultiDayViewStyle>
			</telerikInput:RadCalendar>
			 <telerikInput:RadButton x:Name="btnRefresh" 
							Clicked="BtnRefresh_Clicked" HorizontalContentAlignment="End" VerticalContentAlignment="Center"
							HorizontalOptions="Center" VerticalOptions="Center"  
							BackgroundColor="Transparent"
							Grid.Row="1" Text="Refresh" />
		</Grid>
    </ContentPage.Content>
</ContentPage>
		


 

3. Code Behind the Refresh Button :


       private void BtnRefresh_Clicked(object sender, EventArgs e)
        {

            cntAppoints.DisplayDate = DateTime.Parse("11/05/2019");

            ObservableCollection<AppointmentViewModel> apps = new ObservableCollection<AppointmentViewModel>() {
                    new AppointmentViewModel()
                        {
                            PK =1,
                            Title="Customer 1",
                            StartDate=DateTime.Parse("2019-05-11T08:00:00"),
                            EndDate=DateTime.Parse("2019-05-11T08:45:00"),
                            Detail="Station: Station 1"
                        },
                    new AppointmentViewModel()
                        {
                            PK =2,
                            Title="Customer 2",
                            StartDate=DateTime.Parse("2019-05-11T08:00:00"),
                            EndDate=DateTime.Parse("2019-05-11T18:00:00"),
                            Detail="Station: STATION 3",
                            IsAllDay=true
                        },
                    new AppointmentViewModel()
                        {
                            PK =3,
                            Title="Customer 3",
                            StartDate=DateTime.Parse("2019-05-11T08:00:00"),
                            EndDate=DateTime.Parse("2019-05-11T08:30:00"),
                            Detail="Station: STATION 4"
                        },
                    new AppointmentViewModel()
                        {
                            PK =4,
                            Title="Customer 4",
                            StartDate=DateTime.Parse("2019-05-11T08:30:00"),
                            EndDate=DateTime.Parse("2019-05-11T08:45:00"),
                            Detail="Station: STATION 4"
                        },
                    new AppointmentViewModel()
                        {
                            PK =5,
                            Title="Customer 5",
                            StartDate=DateTime.Parse("2019-05-11T09:00:00"),
                            EndDate=DateTime.Parse("2019-05-11T09:30:00"),
                            Detail="Station: Station 1"
                        },
                    new AppointmentViewModel()
                        {
                            PK =6,
                            Title="Customer 6",
                            StartDate=DateTime.Parse("2019-05-11T09:00:00"),
                            EndDate=DateTime.Parse("2019-05-11T09:15:00"),
                            Detail="Station: STATION 4"
                        },
                    new AppointmentViewModel()
                        {
                            PK =7,
                            Title="Customer 7",
                            StartDate=DateTime.Parse("2019-05-11T09:15:00"),
                            EndDate=DateTime.Parse("2019-05-11T10:00:00"),
                            Detail="Station: Station 1"
                        },
                    new AppointmentViewModel()
                        {
                            PK =8,
                            Title="Customer 8",
                            StartDate=DateTime.Parse("2019-05-11T09:30:00"),
                            EndDate=DateTime.Parse("2019-05-11T09:45:00"),
                            Detail="Station: Station 1"
                        },
                    new AppointmentViewModel()
                        {
                            PK =9,
                            Title="Customer 9",
                            StartDate=DateTime.Parse("2019-05-11T09:45:00"),
                            EndDate=DateTime.Parse("2019-05-11T10:30:00"),
                            Detail="Station: Station 1"
                        },
                    new AppointmentViewModel()
                                        {
                            PK =10,
                            Title="Customer 10",
                            StartDate=DateTime.Parse("2019-05-11T10:00:00"),
                            EndDate=DateTime.Parse("2019-05-11T10:30:00"),
                            Detail="Station: STATION 4"
                        },
                    new AppointmentViewModel()
                        {
                            PK =11,
                            Title="Customer 11",
                            StartDate=DateTime.Parse("2019-05-11T11:30:00"),
                            EndDate=DateTime.Parse("2019-05-11T12:15:00"),
                            Detail="Station: Station 1"
                        },
                    new AppointmentViewModel()
                        {
                            PK =12,
                            Title="Customer 12",
                            StartDate=DateTime.Parse("2019-05-11T12:00:00"),
                            EndDate=DateTime.Parse("2019-05-11T12:45:00"),
                            Detail="Station: STATION 4"
                        },
                    new AppointmentViewModel()
                        {
                            PK =13,
                            Title="Customer 13",
                            StartDate=DateTime.Parse("2019-05-11T12:30:00"),
                            EndDate=DateTime.Parse("2019-05-11T13:15:00"),
                            Detail="Station: Station 1"
                        },
                    new AppointmentViewModel()
                        {
                            PK =14,
                            Title="Customer 14",
                            StartDate=DateTime.Parse("2019-05-11T12:30:00"),
                            EndDate=DateTime.Parse("2019-05-11T13:00:00"),
                            Detail="Station: STATION 4"
                        },
                    new AppointmentViewModel()
                        {
                            PK =15,
                            Title="Customer 15",
                            StartDate=DateTime.Parse("2019-05-11T13:00:00"),
                            EndDate=DateTime.Parse("2019-05-11T13:15:00"),
                            Detail="Station: STATION 2"
                        },
                    new AppointmentViewModel()
                        {
                            PK =16,
                            Title="Customer 16",
                            StartDate=DateTime.Parse("2019-05-11T13:15:00"),
                            EndDate=DateTime.Parse("2019-05-11T13:30:00"),
                            Detail="Station: Station 1"
                        },
                    new AppointmentViewModel()
                        {
                            PK =17,
                            Title="Customer 17",
                            StartDate=DateTime.Parse("2019-05-11T13:15:00"),
                            EndDate=DateTime.Parse("2019-05-11T13:30:00"),
                            Detail="Station: STATION 4"
                        },
                    new AppointmentViewModel()
                                        {
                            PK =18,
                            Title="Customer 18",
                            StartDate=DateTime.Parse("2019-05-11T13:30:00"),
                            EndDate=DateTime.Parse("2019-05-11T14:00:00"),
                            Detail="Station: Station 1"
                        },
                    new AppointmentViewModel()
                        {
                            PK =19,
                            Title="Customer 19",
                            StartDate=DateTime.Parse("2019-05-11T13:30:00"),
                            EndDate=DateTime.Parse("2019-05-11T14:00:00"),
                            Detail="Station: STATION 4"
                        },
                    new AppointmentViewModel()
                        {
                            PK =20,
                            Title="Customer 20",
                            StartDate=DateTime.Parse("2019-05-11T14:00:00"),
                            EndDate=DateTime.Parse("2019-05-11T14:30:00"),
                            Detail="Station: Station 1"
                        },
                    new AppointmentViewModel()
                        {
                            PK =21,
                            Title="Customer 21",
                            StartDate=DateTime.Parse("2019-05-11T14:30:00"),
                            EndDate=DateTime.Parse("2019-05-11T15:00:00"),
                            Detail="Station: Station 1"
                        },
                    new AppointmentViewModel()
                        {
                            PK =22,
                            Title="Customer 22",
                            StartDate=DateTime.Parse("2019-05-11T14:30:00"),
                            EndDate=DateTime.Parse("2019-05-11T15:00:00"),
                            Detail="Station: STATION 4"
                        },
                    new AppointmentViewModel()
                        {
                            PK =23,
                            Title="Customer 23",
                            StartDate=DateTime.Parse("2019-05-11T15:00:00"),
                            EndDate=DateTime.Parse("2019-05-11T15:30:00"),
                            Detail="Station: Station 1"
                        },
                    new AppointmentViewModel()
                        {
                            PK =24,
                            Title="Customer 24",
                            StartDate=DateTime.Parse("2019-05-11T15:00:00"),
                            EndDate=DateTime.Parse("2019-05-11T15:45:00"),
                            Detail="Station: Station 1nServices: head massage and shampoo, short to medium blowdry"
                        },
                    new AppointmentViewModel()
                        {
                            PK =25,
                            Title="Customer 25",
                            StartDate=DateTime.Parse("2019-05-11T15:15:00"),
                            EndDate=DateTime.Parse("2019-05-11T15:30:00"),
                            Detail="Station: STATION 2"
                        },
                    new AppointmentViewModel()
                        {
                            PK =26,
                            Title="Customer 26",
                            StartDate=DateTime.Parse("2019-05-11T15:30:00"),
                            EndDate=DateTime.Parse("2019-05-11T16:00:00"),
                            Detail="Station: STATION 4"
                        },
                    new AppointmentViewModel()
                        {
                            PK =27,
                            Title="Customer 27",
                            StartDate=DateTime.Parse("2019-05-11T15:45:00"),
                            EndDate=DateTime.Parse("2019-05-11T16:15:00"),
                            Detail="Station: STATION 2"
                        },
                    new AppointmentViewModel()
                        {
                            PK =28,
                            Title="Customer 28",
                            StartDate=DateTime.Parse("2019-05-11T16:00:00"),
                            EndDate=DateTime.Parse("2019-05-11T16:30:00"),
                            Detail="Station: STATION 4"
                        },
                    new AppointmentViewModel()
                        {
                            PK =29,
                            Title="Customer 29",
                            StartDate=DateTime.Parse("2019-05-11T16:30:00"),
                            EndDate=DateTime.Parse("2019-05-11T16:45:00"),
                            Detail="Station: Station 1"
                        },
                    new AppointmentViewModel()
                        {
                            PK =30,
                            Title="Customer 30",
                            StartDate=DateTime.Parse("2019-05-11T16:45:00"),
                            EndDate=DateTime.Parse("2019-05-11T17:15:00"),
                            Detail="Station: Station 1"
                        },
                    new AppointmentViewModel()
                        {
                            PK =31,
                            Title="Customer 31",
                            StartDate=DateTime.Parse("2019-05-11T17:00:00"),
                            EndDate=DateTime.Parse("2019-05-11T17:30:00"),
                            Detail="Station: STATION 4"
                        },
                    new AppointmentViewModel()
                        {
                            PK =32,
                            Title="Customer 32",
                            StartDate=DateTime.Parse("2019-05-11T17:15:00"),
                            EndDate=DateTime.Parse("2019-05-11T17:45:00"),
                            Detail="Station: Station 1"
                        },
                    new AppointmentViewModel()
                    {
                        PK =33,
                        Title="Customer 33",
                        StartDate=DateTime.Parse("2019-05-11T17:15:00"),
                        EndDate=DateTime.Parse("2019-05-11T17:45:00"),
                        Detail="Station: STATION 4"
                    }

                };
          
            cntAppoints.AppointmentsSource = null;
            cntAppoints.AppointmentsSource = apps;
            //GetData(cntAppoints.DisplayDate);
            //expFilters.IsExpanded = false;
        }


 

4. After running the above code, the following issues are encountered when appointments are generated on the calendar (screens taken from original application):

  •  Customer_8.jpg - Appointment for Customer 8 is overlapping appointment with customer 7 when on calendar there is enough space in the other columns;
  •  Customer_14.jpg - Appointment for Customer 14 is overlapping appointment with customer 12.  Appointment for Customer 13 is hidden under Customer 14;
  • Customers_26_27_28.jpg - Appointments for Customers 26,27,28 are overlapping with appointment for customer 24 when on calendar their is ample space were to generate these appoints.
  • Customer_32.jpg - This is the worst scenario.   Appointments for Customer 32 and 33 are sharing the same time slot.  This appointments overlapping and users can only view appointment 33.

 

 

Can you please give me an indication what I am doing wrong in my code or how can avoid such cases.  The scenarios indicated above are misleading to the final users.  I notised that such tickets for similar issues where raised since 2017 but never finally answered. 

In Development
Last Updated: 15 Aug 2019 14:08 by ADMIN

Using the code code below, the RadBusyIndicator will animate the first time you toggle IsBusy.

However, any subsequent changes to IsBusy will show the AnimationType's graphic, but without animation.

<telerikBusyIndicator:RadBusyIndicator x:Name="radBusyIndicator"
                                               AnimationType="Animation4"
                                               IsBusy="{Binding IsBusy}"
                                               IsVisible="{Binding IsBusy}"
                                               Grid.RowSpan="3" />

Approved
Last Updated: 14 Aug 2019 12:11 by ADMIN
After setting the MajorLinesVisibility property to GridLineVisibility.Xy only the Y lines are showing up.
Under Review
Last Updated: 13 Aug 2019 13:27 by ADMIN
consider adding a "max height" and "max width" option so that the file sizes are manageable. So in that scenario if we set the max height to 450 then we shouldn't see anything larger than 800x450 in the result.
In Development
Last Updated: 13 Aug 2019 11:10 by ADMIN
When in single-page-mode and navigating to a page with the same size as the current, the content is not updated unless some touch interaction occurs.
Approved
Last Updated: 12 Aug 2019 21:04 by ADMIN

Hi there,

 

We're struggeling with the radentry control. For login purposes we use one for the password and one for the email. When we set IsPassword=true this does show dots instead of words, but some basic stuff isn't working.

1) The normal entry with IsPassword=true does also hide the suggestion tab that is above the keyboard. We also tried hiding this with other settings but to no result. This control should also hide suggestions since it is a password and we don't want to cache this in any way.

2) When we replace the radentry password field with a xamarin entry password field (so set IsPassword=true on both) then we also get the password fill option. In this case Samsung keypass. I imagine if people are using autofillers such as samsung, google, or something else, that this should also work since i'm stating the field is a password field.

Tested on android with multiple devices.

Thanks in advance!

 

Martijn

Approved
Last Updated: 12 Aug 2019 13:15 by ADMIN
ADMIN
Created by: Lance | Technical Support Engineer, Principal
Comments: 8
Category: DataForm
Type: Feature Request
6
Expose an IsEnabled property for editors that can be toggled after DataForm is rendered.

Currently, only Data Annotations can determine whether or not a property's editor is read-only. If a specific editor's read only state needs to be changed dynamically (e.g. due to a selection in another editor), you would need to completely reload the DataForm.
Approved
Last Updated: 12 Aug 2019 12:59 by ADMIN
ADMIN
Created by: Lance | Technical Support Engineer, Principal
Comments: 2
Category: DataForm
Type: Feature Request
2
Add public-facing methods to re-call DataSourceProvider GetSourceFor methods. This would allow for refreshing the datasource.

Alternatively, add support for ObservableCollection to be used for DataSources so that the pickers reflect any changes to the underlying data source.
Approved
Last Updated: 12 Aug 2019 12:10 by ADMIN
As an effect of this, characters, which are not contained in the StandardEncoding names, e.g. umlauts, are measured with incorrect glyph widths. This leads to incorrect glyph positioning in RadPdfViewer.
Declined
Last Updated: 09 Aug 2019 14:24 by ADMIN
Created by: Benjamin
Comments: 1
Category: UI for Xamarin
Type: Feature Request
0

It would be a good to have function to be able to swipe on the header and also to be able to swipe on the content area to go to next tab. 

 

This request is for iOS and Android

Approved
Last Updated: 09 Aug 2019 09:54 by ADMIN
Java.Lang.IllegalStateException: The specified child already has a parent. You must call removeView() on the child's parent first.

For example change the IsPullToRefreshEnabled state on button click, when button is pressed several times, exception is throw.