Hi team,
Need help with the below scenario.
I have two Xam data grids where i am using Drag drop manager to do drag & drop .
My Xam Data grid 1 & 2 are bound to a class below.
public class Emp
{
public int ID{get;set;}
public string Gender {get;set;}
}
The Dragsource & drop target of a data record should be same either of male or female, if i am dragging male onto a female record, then drop should not be allowed and icon should change as in DropNotAllowedCursorTemplate .
XAML code for my XAM data grid ::
<Style TargetType="{x:Type igDP:CellValuePresenter}"> <Setter Property="Background" Value="Transparent"/> <Setter Property="BorderBrush" Value="Transparent"/> <Setter Property="BackgroundHover" Value="Transparent"/> <Setter Property="BorderHoverBrush" Value="Transparent"/> <Setter Property="BackgroundActive"> <Setter.Value> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <GradientStop Offset="0" Color="#FF85A2B2"/> <GradientStop Offset="1.1" Color="#00FFFFFF"/> </LinearGradientBrush> </Setter.Value> </Setter> <Setter Property="BorderActiveBrush" Value="#00151C55"/> <Setter Property="BackgroundSelected"> <Setter.Value> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <GradientStop Offset="0" Color="#FFCAEBFF"/> <GradientStop Offset="1.1" Color="#00FFFFFF"/> <GradientStop Color="#83CAEBFF" Offset="1"/> </LinearGradientBrush> </Setter.Value> </Setter> <Setter Property="BorderSelectedBrush" Value="#FF666666"/> <Setter Property="BackgroundFieldSelected"> <Setter.Value> <LinearGradientBrush StartPoint="0,0" EndPoint="0,1"> <GradientStop Offset="0" Color="#FFDDDDDD"/> <GradientStop Offset="1.1" Color="#00FFFFFF"/> </LinearGradientBrush> </Setter.Value> </Setter> <Setter Property="BorderFieldSelectedBrush" Value="#FF666666"/> <Setter Property="BackgroundPrimary" Value="#7FE9E9E9"/> <Setter Property="BorderPrimaryBrush" Value="#FFE9E9E9"/> <Setter Property="ForegroundStyle"> <Setter.Value> <Style/> </Setter.Value> </Setter> <Setter Property="ForegroundActiveStyle" Value="{DynamicResource {ComponentResourceKey {x:Type igDP:XamDataGrid}, GrayForegroundStyle}}" /> <Setter Property="ForegroundAlternateStyle" Value="{DynamicResource {ComponentResourceKey {x:Type igDP:XamDataGrid}, GrayForegroundStyle}}" /> <Setter Property="ForegroundPrimaryStyle" Value="{DynamicResource {ComponentResourceKey {x:Type igDP:XamDataGrid}, GrayForegroundStyle}}" /> <Setter Property="ForegroundSelectedStyle" Value="{DynamicResource {ComponentResourceKey {x:Type igDP:XamDataGrid}, GrayForegroundStyle}}" /> <Setter Property="ForegroundFieldSelectedStyle" Value="{DynamicResource {ComponentResourceKey {x:Type igDP:XamDataGrid}, GrayForegroundStyle}}" /> <Setter Property="ForegroundHoverStyle" Value="{DynamicResource {ComponentResourceKey {x:Type igDP:XamDataGrid}, GrayForegroundStyle}}" /> <Setter Property="CornerRadius" Value="0"/> <Setter Property="BorderThickness" Value="0"/> <Setter Property="Padding" Value="2,0,0,0"/> <Setter Property="VerticalContentAlignment" Value="Center"/> <Setter Property="HorizontalContentAlignment" Value="Stretch"/> <Setter Property="Template"> <Setter.Value> <ControlTemplate TargetType="{x:Type igDP:CellValuePresenter}"> <igWindows:CardPanel MouseDown="CardPanel_MouseDown" >
<ig:DragDropManager.DragSource> <ig:DragSource IsDraggable="True" DragChannels="ChannelA" Drop="DragSource_Drop" DragOver="DragSource_DragOver" DragStart="DragSource_DragStart"> <ig:DragSource.DropNotAllowedCursorTemplate> <DataTemplate> <Ellipse Fill="Red" Width="25" Height="25" /> </DataTemplate> </ig:DragSource.DropNotAllowedCursorTemplate> </ig:DragSource> </ig:DragDropManager.DragSource>
<Border x:Name="MainBorder" CornerRadius="{TemplateBinding CornerRadius}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}"/> <Rectangle x:Name="Active" Fill="{TemplateBinding BackgroundActive}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Width="Auto" Height="Auto" SnapsToDevicePixels="True" Opacity="1" Visibility="Collapsed" StrokeThickness="1" Stroke="{TemplateBinding BorderActiveBrush}"/> <ContentPresenter x:Name="PART_EditorSite" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Margin="{TemplateBinding Padding}" Style="{TemplateBinding ForegroundStyle}" >
</ContentPresenter> </igWindows:CardPanel> <ControlTemplate.Triggers> <!-- HighlightAsPrimary --> <Trigger Property="HighlightAsPrimary" Value="true"> <Setter Property="Background" Value="{Binding Path=BackgroundPrimary, RelativeSource={RelativeSource Self}}"/> <Setter Property="BorderBrush" Value="{Binding Path=BorderPrimaryBrush, RelativeSource={RelativeSource Self}}"/> <Setter TargetName="PART_EditorSite" Property="Style" Value="{Binding Path=ForegroundPrimaryStyle, RelativeSource={RelativeSource TemplatedParent}}"/> </Trigger> <!-- IsFieldSelected --> <Trigger Property="IsFieldSelected" Value="true"> <Setter Property="Background" Value="{Binding Path=BackgroundFieldSelected, RelativeSource={RelativeSource Self}}"/> <Setter Property="BorderBrush" Value="{Binding Path=BorderFieldSelectedBrush, RelativeSource={RelativeSource Self}}"/> <Setter TargetName="PART_EditorSite" Property="Style" Value="{Binding Path=ForegroundFieldSelectedStyle, RelativeSource={RelativeSource TemplatedParent}}"/> </Trigger> <!-- IsSelected --> <Trigger Property="IsSelected" Value="true"> <Setter Property="Background" Value="{Binding Path=BackgroundSelected, RelativeSource={RelativeSource Self}}"/> <Setter Property="BorderBrush" Value="{Binding Path=BorderSelectedBrush, RelativeSource={RelativeSource Self}}"/> <Setter TargetName="PART_EditorSite" Property="Style" Value="{Binding Path=ForegroundSelectedStyle, RelativeSource={RelativeSource TemplatedParent}}"/> <!--<Setter Property="Visibility" Value="Visible" TargetName="LeftBorder" />--> </Trigger> <!-- IsActive --> <Trigger Property="IsActive" Value="true"> <Setter TargetName="PART_EditorSite" Property="Style" Value="{Binding Path=ForegroundActiveStyle, RelativeSource={RelativeSource TemplatedParent}}"/> <Setter Property="Visibility" TargetName="Active" Value="Visible"/> </Trigger> <!-- IsMouseOver --> <MultiTrigger> <MultiTrigger.Conditions> <Condition Property="IsMouseOver" Value="True"/> <Condition Property="IsSelected" Value="False"/> <Condition Property="IsFieldSelected" Value="False"/> </MultiTrigger.Conditions> <Setter Property="Background" Value="{Binding Path=BackgroundHover, RelativeSource={RelativeSource Self}}"/> <Setter Property="BorderBrush" Value="{Binding Path=BorderHoverBrush, RelativeSource={RelativeSource Self}}"/> <Setter TargetName="PART_EditorSite" Property="Style" Value="{Binding Path=ForegroundHoverStyle, RelativeSource={RelativeSource TemplatedParent}}"/> </MultiTrigger> <!-- Field.IsFixedStateChanging JM 01-22-09 NA 9.1 FixedFields --> <DataTrigger Binding="{Binding Path=Field.IsFixedStateChanging, RelativeSource={RelativeSource Self}}" Value="True"> <Setter Property="Background" Value="#AA8DBAEB"/> <Setter Property="BorderBrush" Value="#AA8DBAEB"/> </DataTrigger> <!--SSP 5/27/09 NAS9.2 IDataErrorInfo Support--> <Trigger Property="IsDataErrorTemplateActive" Value="true"> <Setter TargetName="PART_EditorSite" Property="ContentTemplate" Value="{DynamicResource {x:Static igDP:DataPresenterBase.DataErrorContentTemplateKey}}" /> </Trigger> </ControlTemplate.Triggers> </ControlTemplate> </Setter.Value> </Setter> <Style.Triggers> <!-- DRCA Foreground Hover Trigger-->
<!-- JJD 4/30/09 - TFS17157 use new IsRecordSelected property --> <Trigger Property="IsRecordSelected" Value="True"> <Setter Property="ForegroundStyle" Value="{DynamicResource {ComponentResourceKey {x:Type igDP:XamDataGrid}, GrayForegroundStyle}}" /> </Trigger>
<!-- DRCA Foreground Selected Trigger--> <!-- JJD 4/30/09 - TFS17157 use new IsMouseOverRecord property --> <Trigger Property="IsMouseOverRecord" Value="True"> <Setter Property="ForegroundStyle" Value="{DynamicResource {ComponentResourceKey {x:Type igDP:XamDataGrid}, GrayForegroundStyle}}" /> </Trigger>
</Style.Triggers> </Style>
Hello,
Thank you for your post. I have been looking into the functionality that you are trying to achieve and I have created a sample application that demonstrates how you can restrict the Drag and Drop operation. I have used the DragEnter event of the DragSource and there, I am comparing the Gender property of the DragSrouce and DropTarget and if they are not equal, I am setting the e.OperationType to DragNotAllowed, in order to change the cursor. After doing so, in the Drop event I am checking the e.OperationType property and if it is DragNotAllowd, I am returning from the method.
Please let me know if you need any further assistance on the matter.
Sincerely,
Krasimir
Developer Support Engineer
Infragistics
www.infragistics.com/support