I am using new DragDropManager and all works fine less then for a little problem that with previous version (RadDragDropManager) was working correctly :
Like attached picture , i have one user control composed by one Grid with one Image and one TextBox ; the usercontrol is marked with :
AllowDrop is placed on the Grid , but placing on the entire Usercontrol doesn't change the problem.
When i drop with this code :
The drop is allowed only on the Image of the control and not on the whoole usercontrol loke with previous version ....
I have try too setting AllowDrop on only one RadNumericUpDown and in this case the drop is allowed ONLY if i am with cursor over the up/down buttons
I have added two images to explain the problem.
Can you help me , because for my company is important to solve this problem.
Best regards
Claudio Rossi
Like attached picture , i have one user control composed by one Grid with one Image and one TextBox ; the usercontrol is marked with :
<UserControl x:Class="LibreriaWpfCoster.EditorSingolaVariabileInt32" xmlns:globalization="clr-namespace:System.Globalization;assembly=mscorlib" xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation" MinWidth="40" MinHeight="20" mc:Ignorable="d" d:DesignWidth="40" d:DesignHeight="71" Loaded="UserControl_Loaded" > <Grid x:Name="LayoutRoot" Background="LightGreen" AllowDrop="True" > <Grid.ColumnDefinitions> <ColumnDefinition Width="20"/> <ColumnDefinition Width="*"/> </Grid.ColumnDefinitions> <!--Icona che cambia in funzione del tipo rilevato e cliccandoci sopra resetta la variabile--> <Image x:Name="imgObj" Source="Images/Numero32Negativo.png" Stretch="Uniform" MouseLeftButtonDown="imgObj_MouseLeftButtonDown" /> <!--Oggetto per editare il nome della variabile--> <TextBox x:Name="varObj" Grid.Column="1" Panel.ZIndex="0" Text="{Binding Path=PlcVar, Mode=TwoWay}" PreviewKeyDown="varObj_PreviewKeyDown" ContextMenu="{x:Null}" /> <!--Oggetto per editare il nome della SysVar--> <TextBox x:Name="varSysObj" Grid.Column="1" Panel.ZIndex="0" Text="{Binding Path=SysVarName, Mode=TwoWay}" PreviewKeyDown="varObj_PreviewKeyDown" ContextMenu="{x:Null}" /> </Grid></UserControl>AllowDrop is placed on the Grid , but placing on the entire Usercontrol doesn't change the problem.
When i drop with this code :
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Windows;using System.Windows.Controls;using System.Windows.Data;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Imaging;using System.Windows.Navigation;using System.Windows.Shapes;using ClassiCoster;using System.ComponentModel;using Telerik.Windows.DragDrop;using Telerik.Windows;namespace LibreriaWpfCoster{ /// <summary> /// Interaction logic for EditorSingolaVariabileInt16.xaml /// </summary> public partial class EditorSingolaVariabileInt32 : UserControl { public EditorSingolaVariabileInt32() { InitializeComponent(); DragDropManager.AddDropHandler(this, OnVarDrop); DragDropManager.AddDragOverHandler(this, OnVarDragOver); DragDropManager.AddDragLeaveHandler(this, OnVarDragLeave); } /// <summary> /// Variabile PLC /// </summary> public SingolaVariabileInt32 Variabile { get { return (SingolaVariabileInt32)GetValue(VariabileProperty); } set { SetValue(VariabileProperty, value); } } public static readonly DependencyProperty VariabileProperty = DependencyProperty.Register("Variabile", typeof(SingolaVariabileInt32), typeof(EditorSingolaVariabileInt32), new PropertyMetadata(new SingolaVariabileInt32(), OnVariabilePropertyChanged)); private static void OnVariabilePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e) { (d as EditorSingolaVariabileInt32).LayoutRoot.DataContext = ((EditorSingolaVariabileInt32)d).Variabile; (d as EditorSingolaVariabileInt32).MettiInPrimoPianoIlControlloCorretto(); } private static List<PlcVariableType> _allowedVars = new List<PlcVariableType>(new PlcVariableType[] { PlcVariableType.INT8, PlcVariableType.UINT8, PlcVariableType.INT16, PlcVariableType.UINT16, PlcVariableType.INT32, PlcVariableType.UINT32, }); /// <summary> /// Specifica i tipi di variabili ammessi per venir messe in binding /// </summary> public List<PlcVariableType> AllowedVars { get { return _allowedVars; } set { _allowedVars = value; } } private static List<PlcVariableType> _allowedIndexVars = new List<PlcVariableType>(new PlcVariableType[] { PlcVariableType.INT8, PlcVariableType.UINT8, PlcVariableType.INT16, PlcVariableType.UINT16, PlcVariableType.INT32, PlcVariableType.UINT32, }); /// <summary> /// Specifica i tipi di variabili che possono venir messe in binding per gli indici /// </summary> public List<PlcVariableType> AllowedIndexVars { get { return _allowedIndexVars; } set { _allowedIndexVars = value; } } /// <summary> /// Fa l'effetto per draggare una variabile /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnVarDragOver(object sender, Telerik.Windows.DragDrop.DragEventArgs e) { Boolean Evidenzia = false; if (e.Data is DataObject) { VariabilePlc vPlc = (e.Data as DataObject).GetData(typeof(VariabilePlc)) as VariabilePlc; if (vPlc != null) { if (vPlc.SysVarID > 0) ProvaASelezionareUnIndice(); Evidenzia = GenericiEditorVariabili.DimmiSeAppartieneAllaLista(_allowedVars, vPlc.Tipo); if (!Evidenzia && vPlc.SysVarID < 1 && GenericiEditorVariabili.DimmiSeHoSelezionatoUnIndice(varObj)) { Evidenzia = GenericiEditorVariabili.DimmiSeAppartieneAllaLista(_allowedIndexVars, vPlc.Tipo); } } } e.Effects = Evidenzia ? DragDropEffects.Copy : DragDropEffects.None; GenericiEditorVariabili.EvidenziaPerDrag(LayoutRoot, Evidenzia); e.Handled = true; } private void OnVarDragLeave(object sender, Telerik.Windows.DragDrop.DragEventArgs e) { e.Effects = DragDropEffects.None; GenericiEditorVariabili.EvidenziaPerDrag(LayoutRoot, false); e.Handled = true; } /// <summary> /// Viene eseguito al drop di una variabile /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void OnVarDrop(object sender, Telerik.Windows.DragDrop.DragEventArgs e) { GenericiEditorVariabili.EvidenziaPerDrag(LayoutRoot, false); if (e.Data == null || !(e.Data is DataObject)) return; VariabilePlc vPlc = (e.Data as DataObject).GetData(typeof(VariabilePlc)) as VariabilePlc; if (vPlc != null) { ProvaASelezionareUnIndice(); if (vPlc.SysVarID < 1 && GenericiEditorVariabili.DimmiSeHoSelezionatoUnIndice(varObj)) { if (GenericiEditorVariabili.DimmiSeAppartieneAllaLista(_allowedIndexVars, vPlc.Tipo)) { String strPrima = varObj.Text.Substring(0, varObj.SelectionStart); String strDopo = varObj.Text.Substring(varObj.SelectionStart + varObj.SelectionLength); Variabile.PlcVar = strPrima + vPlc.PlcVar + strDopo; } else { if (GenericiEditorVariabili.DimmiSeAppartieneAllaLista(_allowedVars, vPlc.Tipo)) { Variabile.ResetVar(); Variabile.PlcVar = vPlc.PlcVar; } } } else { if (GenericiEditorVariabili.DimmiSeAppartieneAllaLista(_allowedVars, vPlc.Tipo)) { Variabile.ResetVar(); if (vPlc.SysVarID > 0) { Variabile.SysVarName = vPlc.PlcVar; Variabile.SysVarID = vPlc.SysVarID; } else { Variabile.PlcVar = vPlc.PlcVar; } } } MettiInPrimoPianoIlControlloCorretto(); e.Handled = true; } } //private void OnDropQuery(object sender, DragDropQueryEventArgs e) //{ // switch (e.Options.Status) // { // case DragStatus.DropDestinationQuery: // if (e.Options.Payload is VariabilePlc) // { // VariabilePlc vPlc = e.Options.Payload as VariabilePlc; // if (GenericiEditorVariabili.DimmiSeAppartieneAllaLista(_allowedVars, vPlc.Tipo) || // (vPlc.SysVarID < 1 && GenericiEditorVariabili.DimmiSeAppartieneAllaLista(_allowedIndexVars, vPlc.Tipo)) // ) // { // e.QueryResult = true; // e.Handled = true; // } // } // break; // } //} //private void OnDropInfo(object sender, DragDropEventArgs e) //{ // LibreriaWpfCoster.CustomDragCue cueObj = e.Options.DragCue as LibreriaWpfCoster.CustomDragCue; // if (e.Options.Status == DragStatus.DropPossible) GenericiEditorVariabili.EvidenziaPerDrag(LayoutRoot,cueObj , true); // if (e.Options.Status == DragStatus.DropImpossible) GenericiEditorVariabili.EvidenziaPerDrag(LayoutRoot,cueObj , false); // if (e.Options.Status != DragStatus.DropComplete) return; // GenericiEditorVariabili.EvidenziaPerDrag(LayoutRoot,cueObj, false); // VariabilePlc vPlc = e.Options.Payload as VariabilePlc; // if (e.Options.Status == DragStatus.DropComplete && vPlc != null) // { // ProvaASelezionareUnIndice(); // if (vPlc.SysVarID < 1 && GenericiEditorVariabili.DimmiSeHoSelezionatoUnIndice(varObj)) // { // if (GenericiEditorVariabili.DimmiSeAppartieneAllaLista(_allowedIndexVars, vPlc.Tipo)) // { // String strPrima = varObj.Text.Substring(0, varObj.SelectionStart); // String strDopo = varObj.Text.Substring(varObj.SelectionStart + varObj.SelectionLength); // Variabile.PlcVar = strPrima + vPlc.PlcVar + strDopo; // } // else // { // if (GenericiEditorVariabili.DimmiSeAppartieneAllaLista(_allowedVars, vPlc.Tipo)) // { // Variabile.ResetVar(); // Variabile.PlcVar = vPlc.PlcVar; // } // } // } // else // { // if (GenericiEditorVariabili.DimmiSeAppartieneAllaLista(_allowedVars, vPlc.Tipo)) // { // Variabile.ResetVar(); // if (vPlc.SysVarID > 0) // { // Variabile.SysVarName = vPlc.PlcVar; // Variabile.SysVarID = vPlc.SysVarID; // } // else // { // Variabile.PlcVar = vPlc.PlcVar; // } // } // } // MettiInPrimoPianoIlControlloCorretto(); // e.Handled = true; // } //} /// <summary> /// Partendo dalla posizione del cursore prova a vedere se nell'intorno c'è un array /// </summary> private void ProvaASelezionareUnIndice() { int PosParentesiSinistra, PosParentesiDestra; if (varObj.Text.Length < 4 || varObj.SelectionStart < 1) return; if (varObj.SelectionStart >= varObj.Text.Length) return; if (",".IndexOf(varObj.Text.Substring(varObj.SelectionStart, 1)) != -1) varObj.SelectionStart++; for (PosParentesiSinistra = varObj.SelectionStart; PosParentesiSinistra > 1; PosParentesiSinistra--) { if ("[,".IndexOf(varObj.Text.Substring(PosParentesiSinistra, 1)) != -1) { break; } } for (PosParentesiDestra = varObj.SelectionStart; PosParentesiDestra < varObj.Text.Length; PosParentesiDestra++) { if (",]".IndexOf(varObj.Text.Substring(PosParentesiDestra, 1)) != -1) { break; } } if (PosParentesiSinistra > 0 && (PosParentesiDestra < varObj.Text.Length)) { varObj.SelectionStart = PosParentesiSinistra + 1; varObj.SelectionLength = PosParentesiDestra - PosParentesiSinistra - 1; } } private void UserControl_Loaded(object sender, RoutedEventArgs e) { LayoutRoot.DataContext = Variabile; MettiInPrimoPianoIlControlloCorretto(); varObj.ContextMenu = null; } private void MettiInPrimoPianoIlControlloCorretto() { Int32 varObjZ = 0; Int32 varSysObjZ = 0; if (Variabile.SysVarID > 0) { varSysObjZ = 1; } else { varObjZ = 1; } varObj.SetValue(Panel.ZIndexProperty, varObjZ); varSysObj.SetValue(Panel.ZIndexProperty, varSysObjZ); } /// <summary> /// Ho gestito quest'evento per aggiornare in caso di testo vuoto /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void varObj_PreviewKeyDown(object sender, KeyEventArgs e) { switch (e.Key) { case Key.Enter: case Key.Back: case Key.Delete: Variabile.ResetVar(); MettiInPrimoPianoIlControlloCorretto(); break; default: break; } e.Handled = true; } /// <summary> /// Serve per cancellare la variabile plc se gli si clicca sopra /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void imgObj_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) { Variabile.ResetVar(); MettiInPrimoPianoIlControlloCorretto(); e.Handled = true; } }}The drop is allowed only on the Image of the control and not on the whoole usercontrol loke with previous version ....
I have try too setting AllowDrop on only one RadNumericUpDown and in this case the drop is allowed ONLY if i am with cursor over the up/down buttons
I have added two images to explain the problem.
Can you help me , because for my company is important to solve this problem.
Best regards
Claudio Rossi