Hiiho! Я разрабатываю представление панели управления с помощью Xamarin.Forms.Xamarin.Forms перетаскиваемый элемент в UWP
Теперь я хочу разрешить пользователю перетаскивать мои значки, чтобы изменить мою сетку. Но по какой-то причине я не вижу визуального представления события перетаскивания в UWP. Событие «DragStarted» - это огонь. Вот мой код
Это мой собственный рендер в UWP.
[assembly: ExportRenderer(typeof(DashboardIcon), typeof(DashboardIconRenderer))]
namespace Paraply.Droid.Custom_Renderers
{
class DashboardIconRenderer : ViewRenderer<DashboardIcon, Windows.UI.Xaml.FrameworkElement>
{
public DashboardIconRenderer()
{
}
protected override void OnElementChanged(ElementChangedEventArgs<DashboardIcon> e)
{
base.OnElementChanged(e);
if (this == null)
return;
this.CanDrag = true;
this.DragStarting += OnDragStarting;
//this.Holding += HandleHoldEvent;
}
protected override void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(sender, e);
this.CanDrag = true;
}
private void OnDragStarting(object sender, DragStartingEventArgs e)
{
//This fires
}
}
Мой contentpage в Xamarin.Forms, или сво Funciton, которая заполняет мою сетку
public void InflateServices(IList<InstalledServiceModel> services)
{
int count = 0;
serviceBoard.Children.Clear();
foreach (InstalledServiceModel service in services)
{
DashboardIcon icon = new DashboardIcon(service.Name, service.IconURL, service.Id);
var p = new TapGestureRecognizer();
p.CommandParameter = icon;
p.SetBinding(TapGestureRecognizer.CommandProperty, "IconClick");
icon.GestureRecognizers.Add(p);
icon.Holding += HandleHoldEvent;
serviceBoard.Children.Add(icon, count % 3, count/3);
count++;
}
}
Теперь каждый DashboardIcon это класс, который является производным от Grid. Это выглядит так:
public class DashboardIcon : Grid
{
//public event EventHandler<DashboardHoldingEventArgs> Holding;
//public void OnHolding(DashboardHoldingEventArgs e) { Holding(this, e); }
public DashboardIcon(string title, string url, int id = -1)
{
Title = title;
URL = url;
ServiceId = id;
/*
UI design
*/
HorizontalOptions = LayoutOptions.FillAndExpand;
VerticalOptions = LayoutOptions.FillAndExpand;
RowDefinitions.Add(new RowDefinition() { Height = new GridLength(0.6, GridUnitType.Star) });
RowDefinitions.Add(new RowDefinition() { Height = new GridLength(0.4, GridUnitType.Star) });
image = new Image()
{
Source = url,
HorizontalOptions = LayoutOptions.CenterAndExpand,
Aspect = Aspect.AspectFit
};
text = new Label()
{
Text = title,
HorizontalTextAlignment = TextAlignment.Center,
TextColor = Color.Black
};
Children.Add(image, 0, 0);
Children.Add(text, 0, 1);
}
Теперь моя функция OnDragStarting срабатывает нормально. Но по какой-то причине я не вижу визуального представления вида, которое я перетаскиваю, я ожидал, что представление будет следовать за моим пальцем, пока я его не убью?
проверить http://www.mrgestures.com/, есть некоторые упоминания UWP, которые могут помочь вам, если сам компонент не работает для вас. –
Не уверен в UWP с настраиваемым рендерером, но поскольку вы упомянули, что используете Xamarin.Forms, вы можете попытаться реализовать это с помощью кросс-платформенного [Rec Gesture Recognizer] (https://developer.xamarin.com/guides/xamarin- формы/пользовательский интерфейс/жесты/панорамирование /). –