【发布时间】:2016-08-16 05:27:37
【问题描述】:
喂!我正在使用 Xamarin.Forms 开发仪表板视图。
现在我想允许用户拖放我的图标来重新排列我的网格。但由于某种原因,我在 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
}
}
我在 Xamarin.Forms 中的内容页,或者它填充我的网格的功能
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 函数可以正常触发。但是由于某种原因,我没有得到我正在拖动的视图的视觉表示,我期待视图跟随我的手指直到我放下它?
【问题讨论】:
-
查看mrgestures.com,如果组件本身不适合您,那里提到的一些 UWP 可能会对您有所帮助。
-
不确定带有自定义渲染器的 UWP,但既然您提到您使用的是 Xamarin.Forms,您可以尝试使用跨平台 Pan Gesture Recognizer 来实现它。
标签: c# xamarin win-universal-app xamarin.forms