Your Privacy Matters: We use our own and third-party cookies to improve your experience on our website. By continuing to use the website we understand that you accept their use. Cookie Policy
2325
Drag & Drop XAM Data Grid
posted

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>

  • 2325
    Verified Answer
    Offline posted

    Hi Team,

     i do something as below 

     private void DragSource_DragOver(object sender, Infragistics.DragDrop.DragDropMoveEventArgs e)
     {
          DataRecordPresenter dpSourceDragged =   Utilities.GetAncestorFromType(e.DragSource as DependencyObject, typeof(DataRecordPresenter), false) as DataRecordPresenter;
    
    
      DataRecordPresenter dragOverTargetElemet =  dragOver.DataRecord.DataItem as emp;
    
    
    if(!( dpSourceDragged.Gender.equals(dragOverTargetElemet )))
    (
       // If the genders are not equal then drop cannot occur.   so i need to  cancel the drop event.
          e.OperationType = OperationType.DropNotAllowed;
    //  also need to set the    e.DropNotAllowedCursorTemplate, 
    )
    
    
    How can i acieve this.  Any Suggestions.