Win10 UI入门 SliderRectangle

看了@段博琼大哥导航滑动的思路,自己又做了一个类似与黄油相机里面的一个功能

                <Grid x:Name="SliderGrid" Grid.ColumnSpan="2" Grid.Row="7">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <ContentPresenter x:Name="LeftContentPresenter"
                            HorizontalAlignment="Center" Tapped="LeftContentPresenter_Tapped"
                            VerticalAlignment="Center">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="*"/>
                            </Grid.RowDefinitions>
                            <TextBlock Text="1111111111" FontSize="20" Margin="0,0,0,10"/>
                            <Rectangle x:Name="LeftRectStateName" Fill="Red" Height="2"
                                                   HorizontalAlignment="Stretch" Grid.Row="1">
                                <Rectangle.RenderTransform>
                                    <CompositeTransform/>
                                </Rectangle.RenderTransform>
                            </Rectangle>
                        </Grid>
                    </ContentPresenter>
                    <ContentPresenter x:Name="RightContentPresenter"
                                                    Grid.Column="1"
                                                    Tapped="RightContentPresenter_Tapped"
                                                    HorizontalAlignment="Center"
                                                    VerticalAlignment="Center">
                        <Grid>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="Auto"/>
                                <RowDefinition Height="*"/>
                            </Grid.RowDefinitions>
                            <TextBlock Text="2222222222" FontSize="20" Margin="0,0,0,10"/>
                            <Rectangle x:Name="RightRectStateName" Fill="Red" Height="2" Opacity="0"
                                                   HorizontalAlignment="Stretch" Grid.Row="1">
                                <Rectangle.RenderTransform>
                                    <CompositeTransform/>
                                </Rectangle.RenderTransform>
                            </Rectangle>
                        </Grid>
                    </ContentPresenter>
                </Grid>
        private Rectangle rect_old; // 上一次选中的 Rectangle
        private Rectangle rect_current;// 当前选中的 Rectangle
        private Storyboard tempStoryboard;
        private void RightContentPresenter_Tapped(object sender, TappedRoutedEventArgs e)
        {
            rect_current = VisualTreeUtil.FindChildOfType<Rectangle>(RightContentPresenter) as Rectangle;
            rect_old = VisualTreeUtil.FindChildOfType<Rectangle>(LeftContentPresenter) as Rectangle;

            var new_rect = ElementUtil.GetBounds(rect_current, SliderGrid);
            var old_rect = ElementUtil.GetBounds(rect_old, SliderGrid);
            tempStoryboard = StoryBordImg(old_rect, new_rect, LeftContentPresenter, RightContentPresenter);

            tempStoryboard.Completed += (s1, e1) =>
            {
                RightContentPresenter.IsHitTestVisible = false;
                LeftContentPresenter.IsHitTestVisible = true;
                rect_current.Opacity = 1;
                rect_old.Opacity = 0;
                tempStoryboard.Stop();

                WYToastDialog dialog = new WYToastDialog();
                dialog.ShowAsync("222");
            };
        }
        private void LeftContentPresenter_Tapped(object sender, TappedRoutedEventArgs e)
        {
            rect_current = VisualTreeUtil.FindChildOfType<Rectangle>(LeftContentPresenter) as Rectangle;
            rect_old= VisualTreeUtil.FindChildOfType<Rectangle>(RightContentPresenter) as Rectangle;

            var new_rect = ElementUtil.GetBounds(rect_current, SliderGrid);
            var old_rect = ElementUtil.GetBounds(rect_old, SliderGrid);
            tempStoryboard = StoryBordImg(old_rect, new_rect, RightContentPresenter, LeftContentPresenter);

            tempStoryboard.Completed += (s1, e1) =>
            {
                LeftContentPresenter.IsHitTestVisible = false;
                RightContentPresenter.IsHitTestVisible = true;
                rect_current.Opacity = 1;
                rect_old.Opacity = 0;
                tempStoryboard.Stop();

                WYToastDialog dialog = new WYToastDialog();
                dialog.ShowAsync("111");
            };
        }

        private Storyboard StoryBordImg(Rect oldR,Rect newR,ContentPresenter oldP,ContentPresenter newP)
        {
            var sb = new Storyboard();
            if (rect_old != null && rect_current != null)
            {
                var anim = new DoubleAnimationUsingKeyFrames();
                Storyboard.SetTarget(anim, rect_old);
                Storyboard.SetTargetProperty(anim, "(UIElement.RenderTransform).(CompositeTransform.TranslateX)");

                EasingDoubleKeyFrame KeyFrame = new EasingDoubleKeyFrame();
                KeyFrame.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromSeconds(0));
                KeyFrame.Value = 0;

                EasingDoubleKeyFrame KeyFrame2 = new EasingDoubleKeyFrame();
                KeyFrame2.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(350));
                KeyFrame2.Value = 600;

                QuarticEase easing = new QuarticEase();
                easing.EasingMode = EasingMode.EaseOut;
                easing.Ease(0.3);
                KeyFrame2.EasingFunction = easing;

                anim.KeyFrames.Add(KeyFrame);
                anim.KeyFrames.Add(KeyFrame2);
                anim.KeyFrames[1].Value = newR.X - oldR.X;

                var anim2 = new DoubleAnimation();
                anim2.To = rect_current.ActualWidth / oldR.Width;
                System.Diagnostics.Debug.WriteLine("x :" + rect_current.ActualWidth / rect_old.ActualWidth);
                anim2.Duration = TimeSpan.FromMilliseconds(100);
                Storyboard.SetTarget(anim2, rect_old);
                Storyboard.SetTargetProperty(anim2, "(UIElement.RenderTransform).(CompositeTransform.ScaleX)");

                sb.Children.Add(anim);
                sb.Children.Add(anim2);
                sb.Begin();
            }
            return sb;
        }

本文可以封装城一个独立的控件使用在自己的项目中

欢迎大家访问我的个人博客:http://achinesepainter.com/

https://msdn.microsoft.com/zh-cn/library/windows/apps/xaml/ee230084

https://msdn.microsoft.com/zh-cn/library/windows/apps/xaml/ee330302

https://msdn.microsoft.com/zh-cn/library/windows/apps/xaml/system.windows.visualstategroup.transitions

时间: 2024-10-14 05:10:53

Win10 UI入门 SliderRectangle的相关文章

Win10 UI入门窗口由默认500px to 320px

https://code.msdn.microsoft.com/Layout-for-windows-that-ba648e1c/ https://msdn.microsoft.com/library/windows/apps/hh465371.aspx https://msdn.microsoft.com/zh-cn/library/windows/apps/hh465349.aspx http://scottge.net/2015/08/29/controlling-the-window-s

Win10 UI入门RelativePanel

<RelativePanel Background="Black" > <Rectangle Fill="Red" Width="100" Height="100" RelativePanel.AlignHorizontalCenterWithPanel="True" RelativePanel.AlignVerticalCenterWithPanel="True"/&

jQuery UI 入门之实用实例

jQuery UI 入门 jQuery UI 简介 jQuery UI 是一个建立在 jQuery JavaScript 库上的小部件和交互库,您可以使用它创建高度交互的 Web 应用程序.无论您是创建高度交互的 Web 应用程序还是仅仅向窗体控件添加一个日期选择器,jQuery UI 都是一个完美的选择.jQuery UI 包含了许多维持状态的小部件(Widget),因此,它与典型的 jQuery 插件使用模式略有不同.所有的 jQuery UI 小部件(Widget)使用相同的模式,所以,只

jQuery UI 入门之实用实例分享

jQuery UI 入门 jQuery UI 简介 jQuery UI 是一个建立在 jQuery JavaScript 库上的小部件和交互库,您可以使用它创建高度交互的 Web 应用程序.无论您是创建高度交互的 Web 应用程序还是仅仅向窗体控件添加一个日期选择器,jQuery UI 都是一个完美的选择.jQuery UI 包含了许多维持状态的小部件(Widget),因此,它与典型的 jQuery 插件使用模式略有不同.所有的 jQuery UI 小部件(Widget)使用相同的模式,所以,只

Android UI之原生——(1)、Android UI入门及常见属性与现象

Android UI之原生--(1).Android UI入门及常见属性与现象 导读 :Android UI入门,对于很多人来讲都是比较简单的,教程也多如牛毛,但是这篇绝对和其他的不一样.从接触android开发就注定UI开发是一个一直需要研究的课题,简单的原生UI使用可能你已经掌握,也可能发现某些组件有着一些不爽,但是只要你搞懂原因,就可以了.实在觉得用着不爽,那么就让自己的UI开发能力变强,然后自己写个好点的.android UI开发需要先学会使用原生UI,然后在学会使用开源UI,最后才是自

iOS UI入门

没有学习过语言的朋友建议先去学习C语言   有编程基础的朋友建议看下OC的基础,这样学习起来UI更加轻松.. 后期我会持续更新UI的基础学习内容  有需要C.OC学习资料的朋友可以给我留言. (文中代码部分是MRC模式,想要了解的朋友可以去看看OC的内存管理) 1.frame.center是相当于父视图而言的,改变视图本身的frame.center会直接影响自身在其父视图上的显示位置. 2.bounds是相对于自身而言的,改变bounds的值会直接影响到自身坐标系原点的位置.进而影响子视图在其上

UI入门指引

1. iOS学习路线: C语言:数据类型.流程控制.函数.指针.字符串.结构体.枚举.预处理: OC:面向对象.内存管理.分类.协议.Block.KVC/KVO.Foundation框架: iOS基础: UIKit框架:基础视图:UIButton,UILabel,UITextField,UIImageView,UIScrollView等: 高级视图:UITableView,UIPickerView, IB的使用等 自定义视图: 控制器: UINavigationController, UITab

jQuery UI 入门

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="jquery-ui-1.12.0/jquery-ui.css"> <style> #d1{height:100p

jQuery UI入门

jQuery UI是jQuery的一个插件集,为jQuery的核心库添加了新的功能. jQUery UI库可以从http://jquery.com下载. 下载一个ZIP文件jquery-ui-1.9.2.custom.zip,它包含了jQuery UI的源代码.示例及文档. 解压后的目录jquery-ui-1.9.2.custom中包含4部分内容: 一个css子目录,包含与jQuery UI相关的CSS文件: 一个js目录,包含jQuery UI的JavaScript文件: 一个developm