Hello Telerik team,
When a user enters a value in the editable textbox of the RadCombobox that doesn't matches any of the available list of items then though the selected value is set to null , the text remains in the editable textbox even on lost focus of the RadCombobox.
I have a requirement where I have to perform a validation when the user tabs out of the editable RadCombobox or tries to click on a different control. The validation is to verify if the text entered by the user is available in the list of items and if not then alert the user of this and open the dropdown.
I implemented this validation on PreviewLostKeyboardFocus event as given below. But the problem is this event gets fired even when the focus enters the RadCombobox.
After the Ok button of the alert is clicked and then when I try to click of the dropdown's button, this event gets fired again and so the alert.
Why does this event fires when the focus enters the radcombobox.
Could you please guide me.
private void radCmbCustomer_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e) { if ((sender as RadComboBox) != null && ((sender as RadComboBox).ItemsSource as Customer[]) != null) { Customer[] larrCustomer = ((sender as RadComboBox).ItemsSource as Customer[]); /*Check if the code entered by the user*/ TextBox txtEditableTextBoxRadCmbCustomer = radCmbCustomer.Template.FindName("PART_EditableTextBox", radCmbCustomer) as TextBox; if (txtEditableTextBoxRadCmbCustomer != null) { string lstrCustomer = txtEditableTextBoxRadCmbCustomer.Text; if (lstrCustomer != null && !lstrCustomer.Trim().Equals(string.Empty)) { var lvarCustomerRecordsMatched = from lobjCustomer in larrCustomer where lobjCustomer.CustomerName.ToUpper() == lstrCustomer.ToUpper() select lobjCustomer; if (lvarCustomerRecordsMatched != null && lvarCustomerRecordsMatched.ToList<Customer>().Count <= 0) { MessageBox.Show("The text you entered isn't an item in the list. \nSelect an item from the list, or enter text that matches one of the listed items.", "Alert"); radCmbCustomer.IsDropDownOpen = true; txtEditableTextBoxRadCmbCustomer.Focus(); e.Handled = true; return;
} } } }| Level 1 | Level 2 | Level 3 | Level 4 | Level 5 | Level 6 | Level 7 | ||||||||
| (-) | Org | |||||||||||||
| Dept 1 | ||||||||||||||
| Cell 1 | ||||||||||||||
| Mgr 1 | ||||||||||||||
| Lead 1 | ||||||||||||||
| Resp 1 | ||||||||||||||
| Work1 | ||||||||||||||
| Work2 | ||||||||||||||
| Work3 | ||||||||||||||
| Resp 2 | ||||||||||||||
| Work4 | ||||||||||||||
| Work5 | ||||||||||||||
| Work6 | ||||||||||||||
| (+) | Dept 2 | |||||||||||||
| (+) | Dept 3 | |||||||||||||
| (-) | Dept4 | |||||||||||||
| Cell 4 | ||||||||||||||
| Mgr 4 | ||||||||||||||
| Lead 4 | ||||||||||||||
| Resp 4 | ||||||||||||||
| Work1 | ||||||||||||||
| Work2 | ||||||||||||||
| Work3 | ||||||||||||||
| Resp 4 | ||||||||||||||
| Work4 | ||||||||||||||
| Work5 | ||||||||||||||
| Work6 | ||||||||||||||
| Dept 2 & Dept 3 are not in expanded state. While I filter I want the filter should be applied to those records of Dept 1 & Dept 4 only | ||||||||||||||
| User can right click on Level 7 data | ||||||||||||||
<Style TargetType="{x:Type telerik:GridViewGroupRow}"> <Setter Property="Visibility" Value="Visible" /> <Style.Triggers> <DataTrigger Binding="{Binding Group.Key, RelativeSource={RelativeSource Self}}" Value="SomeValue"> <Setter Property="Visibility" Value="Collapsed" /> </DataTrigger> </Style.Triggers></Style><UserControl x:Class="Sicant.Modules.PSCDocument.Controls.TreeView" xmlns:example="clr-namespace:Sicant.Modules.PSCDocument" xmlns:tlkn="http://schemas.telerik.com/2008/xaml/presentation" xmlns:Commands="clr-namespace:Sicant.Global.Commands;assembly=Sicant.Global" d:DesignHeight="600" d:DesignWidth="300" mc:Ignorable="d"> <UserControl.Resources> <Style x:Key="SquareButton" TargetType="{x:Type Button}"> <Setter Property="Button.Height" Value="25" /> <Setter Property="Button.Width" Value="25" /> <Setter Property="Margin" Value="2,2,2,2" /> </Style> <Style x:Key="Menu" TargetType="Grid"> <Setter Property="Height" Value="25" /> <Setter Property="Width" Value="300" /> <Setter Property="Background" Value="{StaticResource DarkBrush}" /> </Style> <!-- nuovo per menù contestuale --> <DataTemplate x:Key="Risorsa1_Template"> <StackPanel Orientation="Horizontal"> <Image Height="30" Source="/Sicant.Global;component/Images/Document.png" /> <TextBlock Margin="5 0 0 0" Text="{Binding Name}" /> </StackPanel> </DataTemplate> <DataTemplate x:Key="Risorsa2_Template"> <StackPanel Orientation="Horizontal"> <Image Height="30" Source="/Sicant.Global;component/Images/Mail_Closed.png" /> <TextBlock Margin="5 0 0 0" Text="{Binding Name}" /> </StackPanel> </DataTemplate> <HierarchicalDataTemplate x:Key="Account_HierTemplate" ItemsSource="{Binding Children}"> <StackPanel Orientation="Horizontal"> <Image Height="30" Source="/Sicant.Global;component/Images/male.png" /> <TextBlock Margin="5 0 0 0" Text="{Binding Name}" /> </StackPanel> </HierarchicalDataTemplate> <HierarchicalDataTemplate x:Key="Container_HierTemplate" ItemsSource="{Binding Children}"> <StackPanel Orientation="Horizontal"> <Image Height="30" Source="/Sicant.Global;component/Images/Metal_Crate.png" /> <TextBlock Margin="5 0 0 0" Text="{Binding Name}" /> </StackPanel> </HierarchicalDataTemplate> <HierarchicalDataTemplate x:Key="PSC_HierTemplate" ItemsSource="{Binding Children}"> <StackPanel Orientation="Horizontal"> <Image Height="30" Source="/Sicant.Global;component/Images/PSC.png" /> <TextBlock Margin="5 0 0 0" Text="{Binding Name}" /> </StackPanel> </HierarchicalDataTemplate> <HierarchicalDataTemplate x:Key="Allegati_HierTemplate" ItemsSource="{Binding Children}"> <StackPanel Orientation="Horizontal"> <Image Height="30" Source="/Sicant.Global;component/Images/Download.png" /> <TextBlock Margin="5 0 0 0" Text="{Binding Name}" /> </StackPanel> </HierarchicalDataTemplate> <HierarchicalDataTemplate x:Key="Add_HierTemplate" ItemsSource="{Binding Children}"> <StackPanel Orientation="Horizontal"> <Image Height="30" Source="/Sicant.Global;component/Images/add-tab.png" /> <TextBlock Margin="5 0 0 0" Text="{Binding Name}" /> </StackPanel> </HierarchicalDataTemplate> <example:MyTemplateSelector x:Key="myTemplateSelector" Template1="{StaticResource Risorsa1_Template}" Template2="{StaticResource Risorsa2_Template}" AccountTemplate="{StaticResource Account_HierTemplate}" ContainerTemplate="{StaticResource Container_HierTemplate}" PSCTemplate="{StaticResource PSC_HierTemplate}" AllegatiTemplate="{StaticResource Allegati_HierTemplate}" AddTemplate="{StaticResource Add_HierTemplate}" /> <DataTemplate x:Key="contextMenuItemTemplate"> <tlkn:RadMenuItem Grid.Column="2" HorizontalAlignment="Left" VerticalAlignment="Center" Command="{Binding MyCommand}" CommandParameter="{ Binding #What is the correct binding?#, RelativeSource={RelativeSource Self} }" Header="{Binding Header}"></tlkn:RadMenuItem> </DataTemplate> <Style x:Key="contextMenuItemStyle" TargetType="tlkn:RadMenuItem"> <Setter Property="Width" Value="200" /> <Setter Property="Height" Value="30" /> <Setter Property="Icon" Value="{Binding Icon}" /> <Setter Property="IsSeparator" Value="{Binding IsSeparator}" /> </Style> <Style x:Key="treeViewStyle" TargetType="tlkn:RadTreeViewItem"> <Setter Property="IsExpanded" Value="True" /> </Style> </UserControl.Resources> <Grid> <DockPanel Name="dockTreePanel1" LastChildFill="True"> <ContentControl Name="TopTreePanel" Height="AUTO" DockPanel.Dock="Top" /> <ContentControl Name="MainTreePanel" DockPanel.Dock="Top" /> <!-- contenitore di treeview complete --> <StackPanel x:Name="Contenitore" Width="300" Margin="0" HorizontalAlignment="Left" VerticalAlignment="Top" Orientation="Vertical"> <!-- contenitore di treeview Archivi completa --> <StackPanel x:Name="Contenitore_Archivi" Width="300" Margin="0" HorizontalAlignment="Left" VerticalAlignment="Top" Orientation="Vertical"> <!-- contenitore di Titolo Archivi --> <Grid HorizontalAlignment="Left" Style="{StaticResource Menu}"> <Grid.ColumnDefinitions> <ColumnDefinition Width="28" /> <ColumnDefinition Width="*" /> <ColumnDefinition Width="48" /> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition /> </Grid.RowDefinitions> <Image Grid.Column="0" Width="16" Height="16" Margin="0" VerticalAlignment="Center" Source="{StaticResource ArchiveImg}" /> <TextBlock Grid.Column="1" Margin="15,0,0,0" HorizontalAlignment="Left" VerticalAlignment="Center" Text="Documento PSC" /> <Button Grid.Column="2" Width="20" Height="20" HorizontalAlignment="Right" VerticalAlignment="Center" Style="{StaticResource SquareButton}" ToolTip="Copia nell'archivio utente" Command="{x:Static Commands:PSCCommand.CmdPSC_PrintAll}"> <Image Width="14" Height="14" Source="{StaticResource PrintImg}" /> </Button> </Grid> <tlkn:RadTreeView x:Name="radTreeView" ItemContainerStyle="{StaticResource treeViewStyle}" ItemTemplateSelector="{StaticResource myTemplateSelector}"> <tlkn:RadContextMenu.ContextMenu> <tlkn:RadContextMenu x:Name="radContextMenu" ItemContainerStyle="{StaticResource contextMenuItemStyle}" ItemTemplate="{StaticResource contextMenuItemTemplate}" Opened="RadContextMenu_Opened" /> </tlkn:RadContextMenu.ContextMenu> </tlkn:RadTreeView> </StackPanel> </StackPanel> </DockPanel> </Grid></UserControl><telerikGridView:RadGridView Name="grdScope" ScrollMode="RealTime" DockPanel.Dock="Bottom" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" CanUserInsertRows="False" AutoGenerateColumns="False" CanUserSortColumns="False" CanUserFreezeColumns="False" CanUserReorderColumns="False" IsFilteringAllowed="False" CanUserResizeColumns="True" Telerik:StyleManager.Theme="Office_Blue" RowStyle="{StaticResource GridViewRowStyleRow}" ScrollViewer.VerticalScrollBarVisibility="Auto" SelectionMode="Single" ScrollViewer.HorizontalScrollBarVisibility="Disabled" ItemsSource="{Binding}" RowDetailsVisibilityMode="Collapsed" RowIndicatorVisibility="Collapsed" IsReadOnly="True" ShowGroupPanel="False" AutoExpandGroups="True" RowLoaded="grdScope_RowLoaded" SelectionUnit="FullRow" SelectionChanged="grdScope_SelectionChanged" MouseDoubleClick="grdScope_MouseDoubleClick" DataLoadMode="Asynchronous" EnableColumnVirtualization="True" EnableRowVirtualization="False">var item = ((IList<Task>) this.grdScope.ItemsSource)[this.SelectedTaskIndex];this.grdScope.SelectedItem = item;
even when variable item has a non-null value, radGridView's SelectedItem property never changes from null to anything else when this code runs.