繁体   English   中英

UWP 中的 Xamarin.Forms 可拖动元素

[英]Xamarin.Forms draggable element in UWP

日保! 我正在使用 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 函数触发得很好。 但是由于某种原因,我没有得到我正在拖动的视图的视觉表示,我希望视图跟随我的手指直到我放下它?

例如,在OnDragStarting您可以设置e.DragUI.SetContentFromBitmap() 在那里您可以指定拖动时要查看的内容(可能是图像)。 同样在这里你可以设置this.Opacity = 0.2; 所以它变得透明或不可见。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM