为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用鼠标在 WPF 中创建左右滑动?

如何使用鼠标在 WPF 中创建左右滑动?

C#
当年话下 2022-06-12 14:53:22
我对 C# 很陌生。所以,我正在尝试在我的 WPF 中创建一个简单的滑动功能,如果我向左或向右滑动,它会转到另一个 wpf 窗口。请帮我!我在网上找不到太多资源。所以我的问题是如何在 wpf 应用程序中使用鼠标滑动,以便我可以使用鼠标滑动在页面/窗口之间切换。我只是想做一个图像旋转木马。到目前为止,我已经按照这个WPF 图像滑动来更改图像,就像在 iOS 中一样 但是,它不会滑动,而是在移动鼠标时放大和缩小。
查看完整描述

2 回答

?
蛊毒传说

TA贡献1895条经验 获得超3个赞

我正在使用页面,但您也可以使用窗口。


第一个。创建两个页面 LeftPage.xaml 和 RightPage.Xaml 并将以下代码添加到 MainWindow.xaml 和 MainWindows.xaml.cs


XAML


主窗口


<Window x:Class="SOWPF.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:SOWPF"

    mc:Ignorable="d" 

    Title="MainWindow" Height="450" Width="800"

    MouseDown="Window_MouseDown" MouseMove="Window_MouseMove">

<Grid>

    <Frame x:Name="MainFrame" NavigationUIVisibility="Hidden" />

</Grid>

C#


public partial class MainWindow : Window

{

    protected Point SwipeStart;

    public MainWindow()

    {

        InitializeComponent();

        MainFrame.Source = new Uri("LeftPage.xaml", UriKind.RelativeOrAbsolute);

    }


    private void Window_MouseDown(object sender, MouseEventArgs e)

    {

        SwipeStart = e.GetPosition(this);

    }


    private void Window_MouseMove(object sender, MouseEventArgs e)

    {

        if (e.LeftButton == MouseButtonState.Pressed)

        {

            var Swipe = e.GetPosition(this);                


            //Swipe Left

            if (SwipeStart != null && Swipe.X > (SwipeStart.X + 200))

            {

                // OR Use Your Logic to switch between pages.

                MainFrame.Source = new Uri("LeftPage.xaml", UriKind.RelativeOrAbsolute);

            }


            //Swipe Right

            if (SwipeStart != null && Swipe.X < (SwipeStart.X - 200))

            {

                // OR Use Your Logic to switch between pages.

                MainFrame.Source = new Uri("RightPage.xaml", UriKind.RelativeOrAbsolute);

            }

        }

        e.Handled = true;

    }

}

//img1.sycdn.imooc.com//62a58eeb0001f29506000343.jpg

查看完整回答
反对 回复 2022-06-12
?
FFIVE

TA贡献1797条经验 获得超6个赞

我创建了一个Behavior,这样整个事情就可以在不需要任何代码的情况下完成。使用 a 的好处Behavior是您可以在解决方案中的任何地方重用它,对它进行单元测试以确保它按您的意愿运行或扩展它的功能。


主窗口


<Window x:Class="TestWpfApplication.MainWindowView"

        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:i="http://schemas.microsoft.com/expression/2010/interactivity"

        xmlns:testWpfApplication="clr-namespace:TestWpfApplication"

        mc:Ignorable="d"

        Title="MainWindow" 

        Height="450" 

        Width="800">


    <i:Interaction.Behaviors>

        <testWpfApplication:SwipeBehavior TargetContentControl="{Binding ElementName=MainContentControl}" LeftUserControl="{Binding Path=LeftControl}" RightUserControl="{Binding Path=RightControl}" />

    </i:Interaction.Behaviors>


    <Grid>

        <ContentControl Name="MainContentControl" />

    </Grid>

</Window>

主窗口代码背后


using System.Windows;


namespace TestWpfApplication

{

    public partial class MainWindowView : Window

    {

        private readonly MainWindowViewModel _mainWindowViewModel = new MainWindowViewModel();


        public MainWindowView()

        {

            InitializeComponent();


            DataContext = _mainWindowViewModel;

        }

    }

}

滑动行为


using System.Windows;

using System.Windows.Controls;

using System.Windows.Input;

using System.Windows.Interactivity;


namespace TestWpfApplication

{

    public class SwipeBehavior : Behavior<Window>

    {

        public static readonly DependencyProperty TargetContentControlProperty = DependencyProperty.RegisterAttached("TargetContentControl", typeof(ContentControl), typeof(SwipeBehavior), new UIPropertyMetadata(null));


        public static readonly DependencyProperty LeftUserControlProperty = DependencyProperty.RegisterAttached("LeftUserControl", typeof(UserControl), typeof(SwipeBehavior), new UIPropertyMetadata(null));


        public static readonly DependencyProperty RightUserControlProperty = DependencyProperty.RegisterAttached("RightUserControl", typeof(UserControl), typeof(SwipeBehavior), new UIPropertyMetadata(null));


        public static ContentControl GetTargetContentControl(DependencyObject dependencyObject)

        {

            return (ContentControl) dependencyObject.GetValue(TargetContentControlProperty);

        }


        public static void SetTargetContentControl(DependencyObject dependencyObject, ContentControl value)

        {

            dependencyObject.SetValue(TargetContentControlProperty, value);

        }


        public static ContentControl GetLeftUserControl(DependencyObject dependencyObject)

        {

            return (UserControl) dependencyObject.GetValue(LeftUserControlProperty);

        }


        public static void SetLeftUserControl(DependencyObject dependencyObject, UserControl value)

        {

            dependencyObject.SetValue(LeftUserControlProperty, value);

        }


        public static ContentControl GetRightUserControl(DependencyObject dependencyObject)

        {

            return (UserControl) dependencyObject.GetValue(RightUserControlProperty);

        }


        public static void SetRightUserControl(DependencyObject dependencyObject, UserControl value)

        {

            dependencyObject.SetValue(RightUserControlProperty, value);

        }


        private Point _swipeStart;


        protected override void OnAttached()

        {

            base.OnAttached();

            AssociatedObject.MouseDown += OnMouseDown;

            AssociatedObject.MouseMove += OnMouseMove;

        }


        private void OnMouseDown(object sender, MouseButtonEventArgs e)

        {

            _swipeStart = e.GetPosition(AssociatedObject);

        }


        private void OnMouseMove(object sender, MouseEventArgs e)

        {

            var targetContentControl = GetValue(TargetContentControlProperty) as ContentControl;


            if (targetContentControl == null)

            {

                return;

            }


            if (e.LeftButton == MouseButtonState.Pressed)

            {

                var swipe = e.GetPosition(AssociatedObject);                


                //Swipe Left

                if (swipe.X > (_swipeStart.X + 200))

                {

                    // OR Use Your Logic to switch between pages.

                    targetContentControl.Content = new LeftControl();

                }


                //Swipe Right

                if (swipe.X < (_swipeStart.X - 200))

                {

                    // OR Use Your Logic to switch between pages.

                    targetContentControl.Content = new RightControl();

                }

            }


            e.Handled = true;

        }

    }

}

主窗口视图模型


using System.Windows.Controls;


namespace TestWpfApplication

{

    internal class MainWindowViewModel

    {

        public UserControl LeftControl { get; } = new LeftControl();


        public UserControl RightControl { get; } = new RightControl();

    }

}

注意: LeftControl 和 RightControl 在此示例中是 WPF 用户控件。此外,您必须在项目中引用 System.Window.Interactivity 才能使用Behavior该类


查看完整回答
反对 回复 2022-06-12
  • 2 回答
  • 0 关注
  • 260 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信