|
using System;
namespace Microsoft.Maui.Controls;
/// <summary>
/// Platform-specific arguments associated with the DragStartingEventArgs.
/// </summary>
public class PlatformDragStartingEventArgs
{
#if IOS || MACCATALYST
/// <summary>
/// Gets the native view attached to the event.
/// </summary>
public UIKit.UIView? Sender { get; }
/// <summary>
/// Gets the interaction used for dragging items.
/// </summary>
public UIKit.UIDragInteraction DragInteraction { get; }
/// <summary>
/// Gets the associated information from the drag session.
/// </summary>
public UIKit.IUIDragSession DragSession { get; }
internal Foundation.NSItemProvider? ItemProvider { get; private set; }
internal Func<UIKit.UIDragPreview?>? PreviewProvider { get; private set; }
internal UIKit.UIDragItem[]? DragItems { get; private set; }
internal Func<UIKit.UIDragInteraction, UIKit.IUIDragSession, bool>? PrefersFullSizePreviews { get; private set; }
internal PlatformDragStartingEventArgs(UIKit.UIView? sender, UIKit.UIDragInteraction dragInteraction,
UIKit.IUIDragSession dragSession)
{
Sender = sender;
DragInteraction = dragInteraction;
DragSession = dragSession;
}
/// <summary>
/// Sets the item provider when dragging begins.
/// </summary>
/// <param name="itemProvider">The custom item provider to use.</param>
/// <remarks>
/// This itemProvider will be applied to the MAUI generated dragItem.
/// </remarks>
public void SetItemProvider (Foundation.NSItemProvider itemProvider)
{
ItemProvider = itemProvider;
}
/// <summary>
/// Sets the preview provider when dragging begins.
/// </summary>
/// <param name="previewProvider">The custom preview provider to use.</param>
/// <remarks>
/// This previewProvider will be applied to the MAUI generated dragItem.
/// </remarks>
public void SetPreviewProvider(Func<UIKit.UIDragPreview?> previewProvider)
{
PreviewProvider = previewProvider;
}
/// <summary>
/// Sets the drag items when dragging begins.
/// </summary>
/// <param name="dragItems">The custom drag items to use.</param>
/// <remarks>
/// These dragItems will be used in place of the MAUI generated dragItem.
/// </remarks>
public void SetDragItems(UIKit.UIDragItem[] dragItems)
{
DragItems = dragItems;
}
/// <summary>
/// Sets the func that requests to keep drag previews full-sized when dragging begins.
/// </summary>
/// <param name="prefersFullSizePreviews">Func that returns whether to request full size previews.</param>
/// <remarks>
/// The default behavior on iOS is to reduce the size of the drag shadow if not requested here.
/// Even if requested, it is up to the system whether or not to fulfill the request.
/// This method exists inside <see cref="PlatformDragStartingEventArgs"/> since the preview must
/// have this value set when dragging begins.
/// </remarks>
public void SetPrefersFullSizePreviews(Func<UIKit.UIDragInteraction, UIKit.IUIDragSession, bool>? prefersFullSizePreviews)
{
PrefersFullSizePreviews = prefersFullSizePreviews;
}
#elif ANDROID
/// <summary>
/// Gets the native view attached to the event.
/// </summary>
public Android.Views.View Sender { get; }
/// <summary>
/// Gets the event containing information for drag and drop status.
/// </summary>
public Android.Views.MotionEvent MotionEvent { get; }
internal Android.Views.View.DragShadowBuilder? DragShadowBuilder { get; private set; }
internal Android.Content.ClipData? ClipData { get; private set; }
internal Java.Lang.Object? LocalData { get; private set; }
internal Android.Views.DragFlags? DragFlags { get; private set; }
internal PlatformDragStartingEventArgs(Android.Views.View sender, Android.Views.MotionEvent motionEvent)
{
Sender = sender;
MotionEvent = motionEvent;
}
/// <summary>
/// Sets the drag shadow when dragging begins.
/// </summary>
/// <param name="dragShadowBuilder">The custom drag shadow builder to use.</param>
public void SetDragShadowBuilder(Android.Views.View.DragShadowBuilder dragShadowBuilder)
{
DragShadowBuilder = dragShadowBuilder;
}
/// <summary>
/// Sets the clip data when dragging begins.
/// </summary>
/// <param name="clipData">The custom clip data to use.</param>
public void SetClipData(Android.Content.ClipData clipData)
{
ClipData = clipData;
}
/// <summary>
/// Sets the local data when dragging begins.
/// </summary>
/// <param name="localData">The custom local data to use.</param>
public void SetLocalData(Java.Lang.Object localData)
{
LocalData = localData;
}
/// <summary>
/// Sets the drag flags when dragging begins.
/// </summary>
/// <param name="dragFlags">The custom drag flags to use.</param>
public void SetDragFlags(Android.Views.DragFlags dragFlags)
{
DragFlags = dragFlags;
}
#elif WINDOWS
/// <summary>
/// Gets the native view attached to the event.
/// </summary>
public Microsoft.UI.Xaml.UIElement Sender { get; }
/// <summary>
/// Gets data for the DragStarting event.
/// </summary>
public Microsoft.UI.Xaml.DragStartingEventArgs DragStartingEventArgs { get; }
/// <summary>
/// Gets or sets a value that indicates whether the DragStartingEventArgs are changed.
/// </summary>
/// <remarks>
/// Set this property's value to true when changing the DragStartingEventArgs so the system does not override the changes.
/// </remarks>
public bool Handled { get; set; }
internal PlatformDragStartingEventArgs(Microsoft.UI.Xaml.UIElement sender,
Microsoft.UI.Xaml.DragStartingEventArgs dragStartingEventArgs)
{
Sender = sender;
DragStartingEventArgs = dragStartingEventArgs;
}
#else
internal PlatformDragStartingEventArgs()
{
}
#endif
}
|