Лучший способ отключить такие события, как щелчок, когда используется просмотр прокрутки - PullRequest
0 голосов
/ 20 октября 2019

Я использовал один вид внутри другого в этом порядке. ScrollView;StakPanel два listViews;GridHere, я вставил pressEvent, чтобы изменить изображение listviewBackground, потому что по какой-то причине я не знаю, почему, когда я использовал pressEvent и releaseEvent в просмотре списка, они никогда не запускались;так что если кто-то знает почему, пожалуйста, ответьте. У этого решения есть другая проблема: когда я прокручиваю свой список по вертикали, элемент в ListView также щелкается, и мое изображение изменяется. Чтобы решить эту проблему, я думаю о создании ViewChanged и ViewChanging вида с прокруткой, если мой вид прокручивается вертикально, события будут запущены. Таким образом, изменяя флаг «IsItemClickEnabled =« False », который просто заставляет работать прокрутку. Затем в событии ViewChanged флаг возвращается обратно в IsItemClickEnabled =« True ». Мой вопрос: есть ли лучший способ решить эту проблему? Почему нажатое событие не работает в ListView?

! [Левый элемент не щелкнул Правый элемент нажал] [1]: https://i.stack.imgur.com/7uCLb.png

<?xml version="1.0" encoding="UTF-8"?>
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:behaviors="using:Microsoft.Toolkit.Uwp.UI.Animations.Behaviors" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:interactivity="using:Microsoft.Xaml.Interactivity" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="IHM.UWP.Views.UserLogin.UserLoginView.ListUsersView" mc:Ignorable="d" Height="1300" Width="900">
   <Page.Background>
      <AcrylicBrush TintColor="#FF4DF7F7" TintOpacity="0.2" Opacity="0.3" />
   </Page.Background>
   <Page.Resources>
      <DataTemplate x:Name="UsersViewTemplate">
         <Grid x:Name="grdListEmployers" Margin="15,15,0,0" IsTapEnabled="False" PointerPressed="grdListEmployers_PointerPressed" IsDoubleTapEnabled="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" IsHoldingEnabled="True" TabFocusNavigation="Cycle" ScrollViewer.VerticalScrollMode="Enabled">
            <Grid.Background>
               <ImageBrush />
            </Grid.Background>
            <Grid.RowDefinitions>
               <RowDefinition Height="*" />
               <RowDefinition Height="1" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
               <ColumnDefinition Width="*" />
               <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <Image x:Name="b" Source="{Binding BackgroungImage }" Grid.Column="0" Grid.ColumnSpan="3">
               <interactivity:Interaction.Behaviors>
                  <behaviors:Fade x:Name="Fade" Value="0.5" Duration="10000" Delay="18000" />
               </interactivity:Interaction.Behaviors>
            </Image>
            <!--<Border  CornerRadius="5"
                         BorderThickness="2" BorderBrush="LightGray" Margin="5"
                          Grid.Row="0"
                         Height="60"
                         Width="400"
                         Grid.Column="0"
                         Grid.ColumnSpan="3">
                    <Border.Background>
                        <ImageBrush/>
                    </Border.Background>-->
            <StackPanel>
               <TextBlock Text="{Binding Post}" Style="{ThemeResource BaseTextBlockStyle}" Margin="155,50,0,0" Foreground="Yellow" FontFamily="Courier Prime Code" />
               <TextBlock Text="{Binding Nome}" Style="{ThemeResource BodyTextBlockStyle}" Margin="155,0,0,0" Foreground="White" FontSize="20" FontWeight="Bold" FontFamily="Courier Prime Code" />
            </StackPanel>
            <!--</Border>-->
            <!--Height="120"
                         Width="120"

                         VerticalAlignment="Stretch"

                         HorizontalAlignment="Left"
                         Stretch="UniformToFill" FocusVisualPrimaryBrush="#FF231818" FocusVisualSecondaryBrush="Black">
                <Ellipse.RenderTransform>
                    <TranslateTransform Y="-0" X="28">

                    </TranslateTransform>-->
            <Ellipse x:Name="Ellipse" Grid.Row="0" Grid.Column="0" Height="120" Width="120" VerticalAlignment="Stretch" HorizontalAlignment="Left" Stretch="UniformToFill" FocusVisualPrimaryBrush="#FF231818" FocusVisualSecondaryBrush="Black">
               <Ellipse.RenderTransform>
                  <TranslateTransform Y="0" X="28" />
               </Ellipse.RenderTransform>
               <Ellipse.Fill>
                  <ImageBrush ImageSource="{Binding Photo}">
                     <ImageBrush.Transform>
                        <ScaleTransform ScaleX="0.9" ScaleY="0.9" CenterX="20" CenterY="59" />
                     </ImageBrush.Transform>
                  </ImageBrush>
               </Ellipse.Fill>
            </Ellipse>
         </Grid>
      </DataTemplate>
   </Page.Resources>
   <Grid>
      <Grid.ColumnDefinitions>
         <ColumnDefinition />
         <ColumnDefinition />
      </Grid.ColumnDefinitions>
      <Grid.RowDefinitions>
         <RowDefinition Height="1780" />
      </Grid.RowDefinitions>
      <!--<StackPanel Height="69" Width="892" Grid.ColumnSpan="2" Grid.Row="0">

                <StackPanel.Background>
                    <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
                        <GradientStop Color=" #808080" Offset="0.0" />
                        <GradientStop Color="#DCDCDC" Offset="0.25" />
                        <GradientStop Color="#A9A9A9" Offset="0.75" />
                    </LinearGradientBrush>

                </StackPanel.Background>

            <TextBlock Text="Usuário" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="27,0,0,0" FontFamily="Courier Prime Code"/>
            </StackPanel>-->
      <ScrollViewer VerticalScrollMode="Enabled" HorizontalScrollMode="Disabled" HorizontalAlignment="Center" VerticalAlignment="Top" Height="1300" Grid.ColumnSpan="2" Grid.Row="0" VerticalScrollBarVisibility="Hidden" IsTapEnabled="False" ViewChanging="ScrollViewer_ViewChanging" ViewChanged="ScrollViewer_ViewChanged">
         <ScrollViewer.Background>
            <SolidColorBrush Color="Aquamarine" Opacity="0.05" />
         </ScrollViewer.Background>
         <StackPanel Orientation="Horizontal" HorizontalAlignment="Left" Margin="0,0,0,0" Width="1400" VerticalAlignment="Top" IsTapEnabled="False" IsHoldingEnabled="False" IsDoubleTapEnabled="False">
            <!--<StackPanel.Background>
                            <SolidColorBrush Color="Aquamarine" Opacity="0.05"></SolidColorBrush>
                        </StackPanel.Background>-->
            <ListView x:Name="MasterListView" ItemsSource="{x:Bind userViewModel.user1}" ScrollViewer.VerticalScrollMode="Disabled" ScrollViewer.HorizontalScrollMode="Disabled" SelectionMode="None" ScrollViewer.VerticalScrollBarVisibility="Hidden" IsTapEnabled="False" ShowsScrollingPlaceholders="False" ItemTemplate="{StaticResource UsersViewTemplate}" IsDoubleTapEnabled="False" IsItemClickEnabled="False" VerticalAlignment="Top" IsFocusEngagementEnabled="False" IsHoldingEnabled="False" IsTabStop="False" HorizontalAlignment="Left" IsMultiSelectCheckBoxEnabled="False" TabFocusNavigation="Once" FocusVisualPrimaryBrush="{x:Null}" FocusVisualSecondaryBrush="{x:Null}" />
            <ListView x:Name="MasterListView2" ItemsSource="{x:Bind  userViewModel.user2}" SelectionMode="None" ScrollViewer.VerticalScrollMode="Disabled" ScrollViewer.HorizontalScrollMode="Disabled" IsItemClickEnabled="False" ShowsScrollingPlaceholders="False" ScrollViewer.VerticalScrollBarVisibility="Hidden" ItemTemplate="{StaticResource UsersViewTemplate}" VerticalAlignment="Top" HorizontalAlignment="Right" IsMultiSelectCheckBoxEnabled="False" IsZoomedInView="False" IsTapEnabled="False" IsRightTapEnabled="False" IsHoldingEnabled="False" IsDoubleTapEnabled="False" />
         </StackPanel>
      </ScrollViewer>
   </Grid>
</Page>

{
   private void grdListEmployers_PointerPressed(object sender, PointerRoutedEventArgs e)
   {
       //Here I change image;
   }
      private void ScrollViewer_ViewChanging(object sender, ScrollViewerViewChangingEventArgs e)
        {
            //Here I disable IsItemClicked at ListView

        }


    private void ScrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
    {

        //Here I enable IsItemClicked at ListView

    }

1 Ответ

0 голосов
/ 21 октября 2019

Что касается вашего pressEvent, вы имеете в виду, что событие PointerPressed в grdListEmployers не запускается? Вы устанавливаете IsTapEnabled в grdListEmployers на false, чтобы событие не было запущено, вам нужно установить его в true, например:

<Grid x:Name="grdListEmployers" Margin="15,15,0,0" IsTapEnabled="True" ......>

О вашей второй проблеме, вы имеете в виду, когда прокручиваете свой просмотр списка, вы не хотите, чтобы элемент в ListView можно было щелкнуть? Если да, вы можете определить, завершилась ли прокрутка в событии ViewChanged.

private void ScrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{

    if (e.IsIntermediate)
    {
        MasterListView.IsItemClickEnabled = false;
    }
    else
    {
        MasterListView.IsItemClickEnabled = true;
    }
}
...