Swipe View的UWP CustomRenderer不能通过Element.OpenOpenSwipeItem打开

问题描述

每当鼠标悬停在滑动视图上时,我都想在滑动视图中打开右箭头。

实际情况: 我收到消息,表明鼠标正在进入和退出滑动视图,但是Element.Open(OpenSwipeItem)无法正常工作。

这里是我的自定义渲染器代码

[assembly: ExportRenderer(typeof(swipeview),typeof(CustomswipeviewRenderer))]
namespace myProject.UWP
{
    public class CustomswipeviewRenderer : swipeviewRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<swipeview> e)
        {
            base.OnElementChanged(e);

            if (Control != null)
            {
                Control.PointerEntered += Control_PointerEntered;
                Control.PointerExited += Control_PointerExited; ;
            }
        }

        private void Control_PointerExited(object sender,PointerRoutedEventArgs e)
        {
            Element.Close();
            Debug.WriteLine("Exited");
        }

        private void Control_PointerEntered(object sender,PointerRoutedEventArgs e)
        {
            Element.Open(OpenSwipeItem.RightItems);
            Debug.WriteLine("Entered");
        }
    }
}

这是滑动视图,它在列表视图的视单元内:

<swipeview>
            <swipeview.RightItems>
                <SwipeItems Mode="Reveal" SwipeBehaviorOnInvoked="Close">
                    <SwipeItem Text="Teste"
                       IconImageSource="{markupExtensions:PlatformImage SourceImage='circle'}"
                       BackgroundColor="{StaticResource DarkBaseBackgroundColor}"/>
                </SwipeItems>
            </swipeview.RightItems>
            <Grid Margin="5" Padding="5" HorizontalOptions="FillAndExpand" BackgroundColor="{StaticResource VeryLightGrayColor}">
                <Grid.ColumnDeFinitions>
                    <ColumnDeFinition Width="Auto"/>
                    <ColumnDeFinition Width="*"/>
                    <ColumnDeFinition Width="Auto"/>
                </Grid.ColumnDeFinitions>
                <Grid.RowDeFinitions>
                    <RowDeFinition Height="Auto"/>
                    <RowDeFinition Height="Auto"/>
                </Grid.RowDeFinitions>
                <ffimageloading:CachedImage Grid.RowSpan="2" IsVisible="{Binding HasWarnings}" LoadingPlaceholder="{markupExtensions:PlatformImage SourceImage='placeholder_icon'}" Source="{Binding WarningIcon}" Aspect="AspectFit" HeightRequest="50" WidthRequest="50" VerticalOptions="Center" HorizontalOptions="Center"/>
                <StackLayout Grid.Column="1" Orientation="Horizontal">
                    <Label Text="{Binding Name}" FontAttributes="Bold" VerticalOptions="Center"/>
                    <Frame Padding="3" BackgroundColor="{Binding OrderStatusColor}" HasShadow="False" CornerRadius="3">
                        <Label Text="{Binding OrderStatusstring}" TextColor="{StaticResource LightTextColor}" FontSize="{OnPlatform Micro,UWP=10}"/>
                    </Frame>
                    <abstractions:TintedImage Source="{markupExtensions:PlatformImage SourceImage='printer'}" Aspect="AspectFit" TintColor="{Binding PrintStatusColor}" HeightRequest="{StaticResource StatusIconsWidhAndHeight}" WidthRequest="{StaticResource StatusIconsWidhAndHeight}" VerticalOptions="Center" HorizontalOptions="Center"/>
                    <abstractions:TintedImage Source="{markupExtensions:PlatformImage SourceImage='money'}" Aspect="AspectFit" TintColor="{Binding PaidStatusColor}" HeightRequest="{StaticResource StatusIconsWidhAndHeight}" WidthRequest="{StaticResource StatusIconsWidhAndHeight}" VerticalOptions="Center" HorizontalOptions="Center"/>
                    <Label Text="{Binding OrderTimeString}" FontSize="{OnPlatform Micro,UWP=10}" TextColor="{StaticResource TextColor}" VerticalOptions="Center" HorizontalOptions="Start"/>
                </StackLayout>
                <Label Grid.Column="1" Grid.Row="1" Text="{Binding Description}" VerticalOptions="Center" FontAttributes="Italic"/>
                <Label Grid.Column="2" Grid.RowSpan="2" Text="{Binding ValueString}" FontAttributes="Bold" HorizontalOptions="Center" VerticalOptions="Center" Margin="5"/>
            </Grid>
        </swipeview>

解决方法

每当鼠标悬停在滑动视图上时,我都想在滑动视图中打开右箭头。

在UWP平台中SwipeView的匹配本机控件为SwipeControl,但不提供Open方法。并且SwipeViewRenderer尚未实现Open行为。因此Open方法无法在UWP平台中使用。