首页 > 解决方案 > 用于滑动视图的 UWP CustomRenderer 无法使用 Element.Open(OpenSwipeItem) 打开

问题描述

每当鼠标悬停在滑动视图上时,我想在滑动视图中打开正确的项目。

实际发生的情况:我收到鼠标正在进入和退出滑动视图的消息,但 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>

标签: uwpuwp-xamlxamarin.uwp

解决方案


每当鼠标悬停在滑动视图上时,我想在滑动视图中打开正确的项目。

SwipeView在UWP平台匹配的原生控件是SwipeControl,不提供Open方法。并SwipeViewRenderer没有执行Open行为。所以Open方法不能在 UWP 平台上工作。


推荐阅读