or
<RadRibbonButton LargeImage="pack://application:,,,/ESCCommon;component/Images/find32.png" /><Button> <StackPanel> <Image Source="pack://application:,,,/ESCCommon;component/Images/find32.png" /> </StackPanel></Button>productsDG.FieldFilterEditorCreated += new EventHandler<Telerik.Windows.Controls.GridView.EditorCreatedEventArgs>(productsDG_FieldFilterEditorCreated);void productsDG_FieldFilterEditorCreated(object sender, Telerik.Windows.Controls.GridView.EditorCreatedEventArgs e){ if (e.Column.Header.ToString() == "Nazwa") e.Editor.Focus();}<Window x:Class="RadGridViewRowFocus.MainWindow" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" Title="MainWindow" Height="350" Width="525"> <Grid> <telerik:RadGridView ItemsSource="{Binding Items}" SelectionUnit="FullRow" IsReadOnly="True" /> </Grid></Window>namespace RadGridViewRowFocus{ using System.Collections.ObjectModel; using System.Windows; public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); DataContext = this; Items = new ObservableCollection<SampleData> { new SampleData { Field1 = "Item 1", Field2 = "Item 1, Field 2" }, new SampleData { Field1 = "Item 2", Field2 = "Item 2, Field 2" }, new SampleData { Field1 = "Item 3", Field2 = "Item 3, Field 2" }, new SampleData { Field1 = "Item 4", Field2 = "Item 4, Field 2" } }; } public ObservableCollection<SampleData> Items { get; set; } } public class SampleData { public string Field1 { get; set; } public string Field2 { get; set; } }}
<UserControl.Resources> <custom:EditTemplateSelector x:Key="EditTemplateSelector" /></UserControl.Resources><telerik:RadGridView Grid.Row="2" ItemsSource="{Binding ListCollectionView, Mode=TwoWay}" SelectionMode="Single" AutoGenerateColumns="False" CanUserDeleteRows="False" CanUserFreezeColumns="False" CanUserReorderColumns="False" CanUserInsertRows="False" RowHeight="30" ColumnWidth="200" BorderThickness="0" ShowColumnHeaders="False" ShowGroupPanel="False" RowIndicatorVisibility="Collapsed" EditTriggers="CellClick"> <telerik:RadGridView.Columns> <aucxis:GridViewDataColumn DataMemberBinding="{Binding SubID}" IsReadOnly="True"/> <aucxis:GridViewDataColumn DataMemberBinding="{Binding DataValue}" CellEditTemplateSelector="{DynamicResource EditTemplateSelector}" Width="Auto"/> </telerik:RadGridView.Columns></telerik:RadGridView>public class EditTemplateSelector : DataTemplateSelector { private IMessageBoxHandler _messageBoxHandler; public DataTemplate BoolDataTemplate { get; set; } public DataTemplate FloatDataTemplate { get; set; } public DataTemplate IntDataTemplate { get; set; } public DataTemplate StringTemplate { get; set; } public DataTemplate TimeSpanTemplate { get; set; } public DataTemplate EnumDataTemplate { get; set; } public DataTemplate FlagsEnumDataTemplate { get; set; } public DataTemplate InOutDoDataTemplate { get; set; } public override DataTemplate SelectTemplate(object item, DependencyObject container) { if (_messageBoxHandler == null) _messageBoxHandler = DependencyInjection.Container.Resolve<IMessageBoxHandler>(); var dataObject = (DataObject)item; if (dataObject == null) { const string nullValue = "This item has a nullvalue and can't be edited"; if (_messageBoxHandler != null) _messageBoxHandler.Show(nullValue, "Let op!", MessageBoxButton.OK, MessageBoxImage.Warning); else MessageBox.Show(nullValue, "Let op!", MessageBoxButton.OK, MessageBoxImage.Warning); return base.SelectTemplate(null, container); } switch (dataObject.DataValue.GetType().ToString()) { //standard Types case "System.Boolean": return BoolDataTemplate; case "System.Single": return FloatDataTemplate; case "System.Int32": return IntDataTemplate; case "System.TimeSpan": return TimeSpanTemplate; case "System.String": return StringTemplate; //Enum types case "Aucxis.VAUC.Shared.Types.AlarmRequestTypes": case "Aucxis.VAUC.Shared.Types.Proxy.AutoHandProxy": case "Aucxis.VAUC.Shared.Types.Proxy.CO2InjectieStatesProxy": case "Aucxis.VAUC.Shared.Types.Proxy.GasmetingStatesProxy": case "Aucxis.VAUC.Shared.Types.Proxy.HighLowProxy": case "Aucxis.VAUC.Shared.Types.Proxy.InOutTypeProxy": case "Aucxis.VAUC.Shared.Types.Proxy.KoelStatesProxy": case "Aucxis.VAUC.Shared.Types.Proxy.N2GeneratorKeuzeProxy": case "Aucxis.VAUC.Shared.Types.Proxy.N2GeneratorMethodesProxy": case "Aucxis.VAUC.Shared.Types.Proxy.N2GeneratorStatesProxy": case "Aucxis.VAUC.Shared.Types.Proxy.N2InjectieStatesProxy": case "Aucxis.VAUC.Shared.Types.Proxy.O2InjectieStatesProxy": case "Aucxis.VAUC.Shared.Types.Proxy.OntdooiTypesProxy": case "Aucxis.VAUC.Shared.Types.Proxy.RuimteCO2InjectieStandProxy": case "Aucxis.VAUC.Shared.Types.Proxy.RuimteGasModusProxy": case "Aucxis.VAUC.Shared.Types.Proxy.RuimteKoelModusProxy": case "Aucxis.VAUC.Shared.Types.Proxy.RuimteKoelStandProxy": case "Aucxis.VAUC.Shared.Types.Proxy.RuimteN2InjectieStandProxy": case "Aucxis.VAUC.Shared.Types.Proxy.RuimteO2InjectieStandProxy": case "Aucxis.VAUC.Shared.Types.Proxy.RuimteStatussenProxy": case "Aucxis.VAUC.Shared.Types.Proxy.RuimteTypesProxy": case "Aucxis.VAUC.Shared.Types.Proxy.VentStatesProxy": case "Aucxis.VAUC.Shared.Types.Proxy.VentWinnerProxy": case "Aucxis.VAUC.Shared.Types.Proxy.VerdamperModussenProxy": case "Aucxis.VAUC.Shared.Types.Proxy.WachtrijCommandoProxy": case "Aucxis.VAUC.Shared.Types.Proxy.WachtrijItemTypesProxy": return EnumDataTemplate; //flagEnums case "Aucxis.VAUC.Shared.Types.Proxy.AlarmTypesProxy": case "Aucxis.VAUC.Shared.Types.Proxy.LogTypesProxy": return FlagsEnumDataTemplate; case "Aucxis.VAUC.Shared.Types.Proxy.InOutDOProxy": return InOutDoDataTemplate; //Custom types (not yet implemented)*/ default: const string notYetImplemented = "This type is not yet implemented. Edit will result in fail"; if (_messageBoxHandler != null) _messageBoxHandler.Show(notYetImplemented, "Let op!", MessageBoxButton.OK, MessageBoxImage.Warning); else MessageBox.Show(notYetImplemented, "Let op!", MessageBoxButton.OK, MessageBoxImage.Warning); return base.SelectTemplate(item, container); } } }<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:custom="clr-namespace:Aucxis.VAUC.GUI.Client.Common.Custom;assembly=Aucxis.VAUC.GUI.Client.Common" xmlns:aucxis="http://schemas.aucxis.com/1/wpf" xmlns:converters="clr-namespace:Aucxis.VAUC.GUI.Client.Common.Converters;assembly=Aucxis.VAUC.GUI.Client.Common" xmlns:controls="clr-namespace:Aucxis.iRAD.Controls;assembly=Aucxis.iRAD.Controls" xmlns:touchScreenKeyBoard="clr-namespace:Aucxis.iRAD.Controls.Touch.Keyboard;assembly=Aucxis.iRAD.Controls.Touch" xmlns:touch="clr-namespace:Aucxis.iRAD.Controls.Touch;assembly=Aucxis.iRAD.Controls.Touch" xmlns:views="clr-namespace:Aucxis.VAUC.GUI.Client.Common.Custom.EditTemplates.Views;assembly=Aucxis.VAUC.GUI.Client.Common" xmlns:controls2="clr-namespace:Aucxis.VAUC.GUI.Client.Common.Custom.Controls;assembly=Aucxis.VAUC.GUI.Client.Common"> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/Aucxis.Client.WPF;component/Themes/Generic.xaml" /> <ResourceDictionary Source="pack://application:,,,/Aucxis.iRAD.Controls.Touch;component/Themes/Generic.xaml" /> <ResourceDictionary Source="pack://application:,,,/Aucxis.iRAD.Controls;component/Themes/Generic.xaml" /> </ResourceDictionary.MergedDictionaries> <aucxis:IntToDoubleConverter x:Key="IntToDoubleConverter" /> <aucxis:InverseBooleanConverter x:Key="InverseBooleanConverter" /> <converters:SingleToDoubleConverter x:Key="SingleToDoubleConverter" /> <custom:EditTemplateSelector x:Key="EditTemplateSelector"> <custom:EditTemplateSelector.BoolDataTemplate> <DataTemplate> <views:BoolView SelectedBool="{Binding DataValue, Mode=TwoWay}" IsEnabled="{Binding ReadOnly, Converter={StaticResource InverseBooleanConverter}}" custom:FocusAttacher.Focus="{Binding ReadOnly, Converter={StaticResource InverseBooleanConverter}}"/> </DataTemplate> </custom:EditTemplateSelector.BoolDataTemplate> <custom:EditTemplateSelector.IntDataTemplate> <DataTemplate> <controls:NumericUpDown x:Name="NumericUpDown" Value="{Binding DataValue, Mode=TwoWay, Converter={StaticResource IntToDoubleConverter}}" IsEnabled="{Binding ReadOnly, Converter={StaticResource InverseBooleanConverter}}" touchScreenKeyBoard:TouchScreenNumericKeyboard.TouchScreenNumericKeyboard="True" NumberDecimalDigits="0" custom:FocusAttacher.Focus="{Binding ReadOnly, Converter={StaticResource InverseBooleanConverter}}"/> </DataTemplate> </custom:EditTemplateSelector.IntDataTemplate> <custom:EditTemplateSelector.EnumDataTemplate> <DataTemplate> <views:EnumView Value="{Binding DataValue, UpdateSourceTrigger=PropertyChanged}"/> </DataTemplate> </custom:EditTemplateSelector.EnumDataTemplate> <custom:EditTemplateSelector.FlagsEnumDataTemplate> <DataTemplate> <views:FlagsEnumView Value="{Binding DataValue, UpdateSourceTrigger=PropertyChanged}"/> </DataTemplate> </custom:EditTemplateSelector.FlagsEnumDataTemplate> <custom:EditTemplateSelector.FloatDataTemplate> <DataTemplate> <controls:NumericUpDown x:Name="NumericUpDown" Value="{Binding DataValue, Mode=TwoWay, Converter={StaticResource SingleToDoubleConverter}}" IsEnabled="{Binding ReadOnly, Converter={StaticResource InverseBooleanConverter}}" touchScreenKeyBoard:TouchScreenNumericKeyboard.TouchScreenNumericKeyboard="True" NumberDecimalDigits="2" custom:FocusAttacher.Focus="{Binding ReadOnly, Converter={StaticResource InverseBooleanConverter}}"/> </DataTemplate> </custom:EditTemplateSelector.FloatDataTemplate> <custom:EditTemplateSelector.InOutDoDataTemplate> <DataTemplate> <views:InOutDOView DataContext="{Binding DataValue, UpdateSourceTrigger=PropertyChanged}"/> </DataTemplate> </custom:EditTemplateSelector.InOutDoDataTemplate> <custom:EditTemplateSelector.StringTemplate> <DataTemplate> <touch:TextBox x:Name="txtBox" Text="{Binding DataValue, Mode=TwoWay}" touchScreenKeyBoard:TouchScreenKeyboard.TouchScreenKeyboard="True" IsEnabled="{Binding ReadOnly, Converter={StaticResource InverseBooleanConverter}}" SelectAllOnFocus="True" custom:FocusAttacher.Focus="{Binding ReadOnly, Converter={StaticResource InverseBooleanConverter}}"/> </DataTemplate> </custom:EditTemplateSelector.StringTemplate> <custom:EditTemplateSelector.TimeSpanTemplate> <DataTemplate> <controls2:TimeSpanPickerTouch x:Name="TimeSpan" Value="{Binding DataValue, Mode=TwoWay}" DaysVisible="False" HorizontalAlignment="Left" VerticalAlignment="Top" IsEnabled="{Binding ReadOnly, Converter={StaticResource InverseBooleanConverter}}" custom:FocusAttacher.Focus="{Binding ReadOnly, Converter={StaticResource InverseBooleanConverter}}"/> </DataTemplate> </custom:EditTemplateSelector.TimeSpanTemplate> </custom:EditTemplateSelector></ResourceDictionary><controls:RadOutlookBar Grid.Row="2" ItemsSource="{Binding Groups}" IsMinimizable="False"> <controls:RadOutlookBar.TitleTemplate> <DataTemplate> <Label Content="{Binding Header}"/> </DataTemplate> </controls:RadOutlookBar.TitleTemplate> <controls:RadOutlookBar.ItemTemplate> <DataTemplate> <Label Content="{Binding Header}"/> </DataTemplate> </controls:RadOutlookBar.ItemTemplate> <controls:RadOutlookBar.ContentTemplate> <DataTemplate> <telerik:RadGridView Grid.Row="2" ItemsSource="{Binding DataObjects, Mode=TwoWay}" SelectionMode="Single" AutoGenerateColumns="False" CanUserDeleteRows="False" CanUserFreezeColumns="False" CanUserReorderColumns="False" CanUserInsertRows="False" RowHeight="30" ColumnWidth="200" BorderThickness="0" ShowColumnHeaders="False" ShowGroupPanel="False" RowIndicatorVisibility="Collapsed" EditTriggers="CellClick"> <telerik:RadGridView.Columns> <aucxis:GridViewDataColumn DataMemberBinding="{Binding SubID}" IsReadOnly="True"/> <aucxis:GridViewDataColumn DataMemberBinding="{Binding DataValue}" CellEditTemplateSelector="{StaticResource EditTemplateSelector}" Width="Auto"/> </telerik:RadGridView.Columns> </telerik:RadGridView> </DataTemplate> </controls:RadOutlookBar.ContentTemplate></controls:RadOutlookBar>