none
ListBox如何阻止默认触屏事件,及如何每次都滚动到下一项? RRS feed

  • 问题

  • 我现在用ListBox设计一个图片触摸滚动控件,在编写时发现一个问题,如果使用ListBox默认的触屏代码,每次滑动时是根据用力大小滑动不同的距离,我现在的需求是,每次滑动都只滑动一个item(ListBoxItem)也就是一张图片,不知道大家有没有什么好的办法,谢谢!
    2013年5月25日 3:27

答案

全部回复

  • 你在ListBox外面套一个ScrollViewer, 然后禁用ListBoxItem的IsHitTestVisible,或者IsManipulationEnabled属性:

            <ListBox>
                <ListBox.ItemContainerStyle>
                    <Style TargetType="ListBoxItem">
                        <Setter Property="IsManipulationEnabled" Value="False"/>
                    </Style>
                </ListBox.ItemContainerStyle>
            </ListBox>

    这样你可以关心实现 ScrollViewer的触摸事件去自定义滚动幅度。


    Bob Bao

    Do you still use the same Windows 8 LockScreen always? Download Chameleon Win8 App quickly, that changes your LockScreen constantly.
    你是否还在看着一成不变的Windows 8锁屏而烦恼,赶紧下载这个 百变锁屏 应用,让你的锁屏不断地变化起来。

    2013年5月27日 8:55
    版主
  • 十分感谢Bob Bao的回答,但我这边还是阻止默认的触屏事件,不知道哪里写错了,代码如下:

    <Window x:Class="WpfApplication1.Window1"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="Window1" Height="700" Width="1024">
        <Window.Resources>
            <Style TargetType="ListBox">
                <Setter Property="ItemTemplate">
                    <Setter.Value>
                        <DataTemplate>
                            <Image Width="200" Height="200" Source="{Binding Path=imgsrc}"></Image>
                        </DataTemplate>
                    </Setter.Value>
                </Setter>
                <Setter Property="ItemsPanel">
                    <Setter.Value>
                        <ItemsPanelTemplate>
                            <StackPanel Orientation="Horizontal"></StackPanel>
                        </ItemsPanelTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Window.Resources>
        <Grid>
            <ScrollViewer>
                <ListBox Name="lbimg" Height="300">
                    <ListBox.ItemContainerStyle>
                        <Style TargetType="ListBoxItem">
                            <Setter Property="IsManipulationEnabled" Value="False"/>
                            <Setter Property="IsHitTestVisible" Value="False"></Setter>
                        </Style>
                    </ListBox.ItemContainerStyle>
                </ListBox>
            </ScrollViewer>
        </Grid>
    </Window>

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Shapes;
    
    namespace WpfApplication1
    {
        /// <summary>
        /// Window1.xaml 的交互逻辑
        /// </summary>
        public partial class Window1 : Window
        {
            List<ImageSouceMe> listimg = new List<ImageSouceMe>();
            public Window1()
            {
                InitializeComponent();
                this.Loaded += Window1_Loaded;
            }
    
            void Window1_Loaded(object sender, RoutedEventArgs e)
            {
                string[] str = Directory.GetFiles(@"D:\图片\test");
                foreach (var item in str)
                {
                    ImageSouceMe imgsm = new ImageSouceMe();
                    imgsm.imgsrc = item;
                    listimg.Add(imgsm);
                }
                lbimg.ItemsSource = listimg;
            }
    
    
        }
    }




    • 已编辑 zwtgg99 2013年5月30日 2:59
    2013年5月30日 2:58
  • 你可以试试ScrollToVerticalOffset方法。

    参考:

    How to show next n items using WPF ListBox or ScrollView?

    祝,顺利!


    Yoyo Jiang[MSFT]
    MSDN Community Support | Feedback to us
    Develop and promote your apps in Windows Store
    Please remember to mark the replies as answers if they help and unmark them if they provide no help.

    • 已标记为答案 zwtgg99 2017年9月16日 8:32
    2013年6月4日 14:15
    版主