`

WPF轮播图片以及滑动切换图片

阅读更多

最近才接触WPF,想做一个轮播图片的效果,而且要可以滑动切换的,在网上找了好多资料,刚开始没有思路,也没有完整代码参考,搞得头好大,研究了好久终于搞定了,功夫不负有心人啊!哈哈!为了给有同样需求的朋友参考,也给自己做个笔记,话不多说,直接进入正题。

一、开发思路

      主要是要有一个容器放置很多张图片,然后让它们排列好,通过添加计时器定时触发切换图片的动作,最后增加鼠标事件以达到左右滑动的效果。

二、代码参考

   <1>MainWindow.xaml

<Window x:Class="ImageCarouselApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:ImageCarouselApp"
        mc:Ignorable="d"
        Title="图片轮播" Height="750" Width="750" Loaded="Window_Loaded">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="10*"></RowDefinition>
            <RowDefinition Height="2*"></RowDefinition>
        </Grid.RowDefinitions>
        <Button Width="500" Grid.Row="0" Background="Transparent" Name="Btn" MouseDown="Btn_MouseDown" MouseUp="Btn_MouseUp" BorderThickness="0">
            <Button.Content>
                <Image Name="Img" Stretch="UniformToFill"/>
            </Button.Content>
        </Button>
        <TextBox Grid.Row="1" Name="IndexInfo" Background="Transparent" Foreground="Blue" FontSize="50" HorizontalAlignment="Center" VerticalAlignment="Center" BorderThickness="0"></TextBox>
    </Grid>
</Window>

   <2>MainWindow.xaml.cs

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
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.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;

namespace ImageCarouselApp
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        ObservableCollection<BitmapImage> imageList; //图片集合
        int index = 0;  //记录索引
        private DispatcherTimer dispatcherTimer; // 计时器
        private Point startPoint; // 记录滑动开始位置
        private Point endPoint; // 记录滑动结束位置
        private bool autoCutover = true; // 是否自动切换
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            ImageInit();
            dispatcherTimer = new DispatcherTimer();
            dispatcherTimer.Tick += new EventHandler(dispatcherTimer_Tick);
            dispatcherTimer.Interval = new TimeSpan(0, 0, 30);
            dispatcherTimer.Start();
        }

        private void ImageInit()
        {
            imageList = new ObservableCollection<BitmapImage>();
            for (int i = 0; i < 5; i++)
            {
                BitmapImage bmImg = new BitmapImage(new Uri(System.Environment.CurrentDirectory + "/Images/" +i.ToString()+".jpg"));
                imageList.Add(bmImg);
                if (i == 0)
                {
                    IndexInfo.Text = "●";

                }
                else
                {
                    IndexInfo.Text += "○";
                }
            }
            if (imageList.Count > 0)
                Img.Source = imageList[index];
        }

        void dispatcherTimer_Tick(object sender, EventArgs e)
        {
            if (this.autoCutover)
            {
                index++;
                if (index >= imageList.Count)
                {
                    index = 0;

                }
                if (imageList.Count > 0)
                {
                    Img.Source = imageList[index];
                    IndexInfo.Text = IndexInfo.Text.Substring(imageList.Count - 1) + IndexInfo.Text.Substring(0, imageList.Count - 1);
                }
            }
            else
            {
                this.autoCutover = true;
            }
        }



        private void Btn_MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (imageList.Count > 0)
            {
                this.autoCutover = false;
                startPoint = Mouse.GetPosition(e.Source as FrameworkElement);
            }
        }

        private void Btn_MouseUp(object sender, MouseButtonEventArgs e)
        {
            if (imageList.Count > 0)
            {
                endPoint = Mouse.GetPosition(e.Source as FrameworkElement);
                //X轴滑动的距离
                double offsetX = startPoint.X - endPoint.X;
                if (offsetX > 10)
                {
                    ++index;
                    if (index >= imageList.Count)
                    {
                        index = 0;
                    }
                    IndexInfo.Text = IndexInfo.Text.Substring(imageList.Count - 1) + IndexInfo.Text.Substring(0, imageList.Count - 1);
                }
                else if (offsetX < -10)
                {
                    --index;
                    if (index < 0)
                    {
                        index = imageList.Count - 1;
                    }
                    IndexInfo.Text = IndexInfo.Text.Substring(1) + IndexInfo.Text.Substring(0, 1);
                }
                Img.Source = imageList[index];
            }
        }

    }
}

 

三、最终效果


 

转载请注明出处: https://xieke90.iteye.com/blog/2440971

 

  • 大小: 619.9 KB
1
0
分享到:
评论

相关推荐

    WPF 图片滑动轮播,按钮滑动,左右滑动,下标点击定位

    例如,可以使用`Storyboard`创建一个`DoubleAnimation`来改变图片的`Opacity`或`RenderTransform`,实现淡入淡出或滑动切换效果。 5. **事件处理**:为实现按钮滑动和左右滑动,我们需要监听`Button`的`Click`事件...

    wpf3D滑动切换图片

    我们将重点讨论如何利用WPF的3D功能来实现一个鼠标滑动切换图片的程序。 首先,我们需要了解WPF中的3D基础。WPF支持基于Direct3D的硬件加速3D图形渲染,通过`Viewport3D`和`Model3DGroup`等元素,我们可以构建复杂...

    WPF 图片轮播 2D 3D

    2D图片轮播通常通过简单的滑动或淡入淡出效果来切换图片。在WPF中,可以使用`ItemsControl`结合`DataTemplate`来实现这个功能。首先,我们需要一个包含所有图片路径的数据集合,然后将其绑定到`ItemsControl`上。...

    WPF实现的图片轮播控件

    以上是一个基本的图片轮播控件实现,可以根据实际需求进行扩展,例如添加手势支持(滑动切换)、预加载下一图片、自定义过渡效果等功能。在实际项目中,还可以将这个控件封装成一个可复用的NuGet包,供其他开发者...

    WPF3D图片轮播效果

    总之,实现WPF3D图片轮播效果需要掌握3D图形基础,创建3D图片模型,利用WPF的动画系统进行动态效果,以及考虑用户体验和性能优化。通过以上步骤,我们可以创建出一款视觉上引人注目的3D图片轮播组件,提升应用程序的...

    22种WPF图片轮播特效.zip

    标题“22种WPF图片轮播特效.zip”表明这是一个包含22种不同图像切换效果的资源包,适用于增强用户界面的视觉吸引力。描述中提到这些特效都带有源码,这为开发者提供了学习和自定义轮播组件的宝贵机会。 WPF,作为...

    WPF之鼠标滑动切换图片

    要实现鼠标滑动切换图片,我们需要关注以下几个关键知识点: 1. **图像控件**: WPF 提供了`Image`控件,可以用来显示图像。通过设置`Source`属性,我们可以指定要显示的图片路径。 2. **事件处理**: 鼠标滑动事件...

    WPF 切换图片动画效果Demo

    "WPF 切换图片动画效果Demo"是一个展示如何在WPF应用中优雅地切换图片并添加动画效果的例子。在这个项目中,我们将探讨如何通过改变Image控件的Source属性,并结合动画效果,实现平滑、动态的图片切换。 1. **Image...

    WPF图片动画效果切换

    2. **滑动切换效果**: 想要实现图片从一侧滑向另一侧的效果,可以使用TranslateTransform来改变图片的位置,并配合DoubleAnimation。设定一个持续时间,让图片在X轴或Y轴上平移一定的距离,达到滑动的效果。 3. *...

    WPF 3D 轮播操控面板,功能强大,详细注释

    在本文中,我们将深入探讨基于WPF的3D轮播操控面板,这是一个功能强大的用户界面组件,特别适用于创建3D展示、轮播图以及复杂的3D操控体验。这个项目不仅提供了丰富的视觉效果,而且设计思路清晰,易于扩展,使得...

    WPF鼠标滑轮滚动切换图片点击图片可放大.zip

    在本文中,我们将深入探讨如何在Windows Presentation Foundation (WPF) 中实现标题和描述中提到的功能,即利用鼠标滚轮滚动来切换图片,点击图片进行放大,并实现180度照片查看以及图片倒影效果。WPF是.NET ...

    Wpf制作的主流图片轮播效果控件

    在图片轮播中,我们可以使用`Storyboard`来添加平滑过渡,如淡入淡出、滑动切换等,提升用户体验。 8. **事件处理**: 除了定时器,我们还需要处理鼠标点击、键盘输入等事件,以便用户能够手动切换图片。这可以...

    wpf特效轮播图

    可以使用故事板(Storyboard)来创建平滑的过渡效果,例如图片的淡入淡出、滑动切换等。 4. **Visual States**:利用VisualStateManager,可以控制控件在不同状态下的外观和行为,比如在轮播时的当前项、上一项和下...

    WPF两款图片滚动样式

    无论是模拟手机滑动还是图片轮播,都可以通过巧妙地组合和自定义控件、动画以及数据绑定技术来实现。这两种样式不仅可以增强应用的视觉吸引力,还能提供直观的导航体验,为用户提供一个优雅的方式来探索和互动图片...

    wpf图片切换特效

    在本文中,我们将深入探讨如何...总结起来,通过WPF的丰富特性,如动画、变换、控件以及数据绑定,我们可以实现各种创意的图片切换特效。开发者可以根据应用场景和用户体验选择合适的效果,使应用更具吸引力和趣味性。

    一个开源轮播图控件

    轮播图通常包含一系列的幻灯片,可以通过手动滑动或自动切换来浏览。它们可能带有导航指示器、左右切换按钮、自动播放功能,甚至支持触控操作。轮播图的实现涉及CSS样式控制、JavaScript动态处理和可能的动画效果。 ...

    c# 图片滑动

    这包括了图片的切换以及滑动动画的实现。在C#中,我们可以使用Timer控件来定时触发图片切换,同时利用AnimateWindow函数(Windows API)或者Storyboard(WPF)来添加平滑的过渡效果,模拟滑动行为。 1. **图片数组...

    WPF效果.zip

    在WPF中,可以利用`Image`控件结合`Storyboard`和`DoubleAnimation`来实现图片的平滑滚动,创造出类似幻灯片或者轮播图的效果。通过调整动画的参数,可以改变滚动速度、方向和过渡方式,使得展示更具吸引力。 再来...

    ViewsPack-master.zip 轮播图

    轮播图(Carousel)是一种常见的UI元素,通常在网页和应用中用于展示一系列图片、内容卡片或其他元素,用户可以通过滑动或点击导航来切换显示内容。 **WPF中的轮播图** 在WPF中,实现轮播图效果通常有两种方式: ...

    图片左右滚动(可自动,有左右按钮)

    "图片左右滚动(可自动,有左右按钮)"这一主题聚焦于一种特定的图片滚动实现,即图片可以自动左右滑动,并且用户可以通过点击左右按钮来手动控制滚动。这种设计常见于产品展示、轮播广告或相册应用中,为用户提供了...

Global site tag (gtag.js) - Google Analytics