47 lines
1.5 KiB
C#
47 lines
1.5 KiB
C#
namespace Lattice.Core.DragDrop.Extensions;
|
|
|
|
/// <summary>
|
|
/// Методы расширения для DropInfo.
|
|
/// </summary>
|
|
public static class DropInfoExtensions
|
|
{
|
|
/// <summary>
|
|
/// Проверяет, могут ли данные быть приведены к указанному типу.
|
|
/// </summary>
|
|
public static bool CanAccept<T>(this Models.DropInfo dropInfo)
|
|
where T : class
|
|
{
|
|
return dropInfo.Data is T;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Пытается получить данные как указанный тип.
|
|
/// </summary>
|
|
public static T? GetDataAs<T>(this Models.DropInfo dropInfo)
|
|
where T : class
|
|
{
|
|
return dropInfo.Data as T;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Получает данные как указанный тип или выбрасывает исключение.
|
|
/// </summary>
|
|
public static T GetRequiredDataAs<T>(this Models.DropInfo dropInfo)
|
|
where T : class
|
|
{
|
|
if (dropInfo.Data is not T data)
|
|
{
|
|
throw new InvalidCastException(
|
|
$"Ожидался тип {typeof(T).Name}, но получен {dropInfo.Data?.GetType().Name ?? "null"}");
|
|
}
|
|
return data;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Проверяет, содержится ли позиция в указанных границах.
|
|
/// </summary>
|
|
public static bool IsInBounds(this Models.DropInfo dropInfo, Geometry.Rect bounds)
|
|
{
|
|
return bounds.Contains(dropInfo.Position);
|
|
}
|
|
} |