listview - 使用滚动视图的视图更改时禁用单击等事件的更好方法
问题描述
我按此顺序在另一个视图中使用了一个视图。滚动视图;StakPanel 两个列表视图;GridHere,我插入了一个 pressEvent 来更改 listviewBackground 图像,因为我不知道为什么,当我在 listview 中使用 pressEvent 和 releaseEvent 时,它们从未被触发;所以如果有人知道为什么请回答。此解决方案还有另一个问题:当我垂直滚动列表时,ListView 中的项目也被单击并且我的图像被更改。为了解决这个问题,我正在考虑创建滚动视图的 ViewChanged 和 ViewChanging,如果我的视图垂直滚动,事件将被触发。因此,通过更改“IsItemClickEnabled = False”标志,这只是使滚动工作。然后,在 ViewChanged 事件中,标志改回 IsItemClickEnabled =
![左侧项目未点击右侧项目点击][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
}
解决方案
关于您的 pressEvent,您的意思是不会触发 grdListEmployers 中的 PointerPressed 事件吗?您将 grdListEmployers 中的 IsTapEnabled 设置为 false,因此不会触发事件,您需要将其设置为 true,例如:
<Grid x:Name="grdListEmployers" Margin="15,15,0,0" IsTapEnabled="True" ......>
关于您的第二个问题,您的意思是当您滚动 listView 时,您不希望 ListView 中的项目可以被点击?如果是,您可以在 ViewChanged 事件中检测滚动视图是否完成滚动。
private void ScrollViewer_ViewChanged(object sender, ScrollViewerViewChangedEventArgs e)
{
if (e.IsIntermediate)
{
MasterListView.IsItemClickEnabled = false;
}
else
{
MasterListView.IsItemClickEnabled = true;
}
}
推荐阅读
- python-3.x - 如何删除一定长度的字符串?
- python - 稀疏矩阵与向量相乘中的列顺序
- ios - 收到通知时的默认声音和振动
- amazon-web-services - AWS:检查联合登录用户的权限
- python - Plotly:如何设置不同的标记不透明度,但为所有标记保持相同的轮廓颜色?
- ios - 如何修复:当我在搜索栏中单击“取消”时,TableView 中的 func selectRow 不起作用
- react-native - 我如何安装反应导航?
- sql-server - .Net Core Identity 种子数据:无法使用已播种的凭据登录
- python - 为什么我的稀疏张量不能转换为张量
- javascript - 从 Json 导出到 CSV 不带引号?