潜移默化学会WPF--Border,焦点移动

   private TextBox tb;
        public MainWindow()
        {
            InitializeComponent();
        }

        private void TextBox_LostFocus(object sender, RoutedEventArgs e)
        {
            tb = (TextBox)sender;

            DoubleAnimation ta = new DoubleAnimation();
            ta.From = 0.5;
            ta.To = 0;
            ta.Duration = new Duration(TimeSpan.FromMilliseconds(100));
            Storyboard.SetTargetName(ta, "Opacity");
            Storyboard.SetTargetProperty(ta, new PropertyPath(Border.OpacityProperty));
            Storyboard storyBoard = new Storyboard();
            storyBoard.Children.Add(ta);
            this.RegisterName("Opacity", this.ColorFulBorder);
            storyBoard.Begin(this, true);
            
        }

        private void TextBox_GotFocus(object sender, RoutedEventArgs e)
        {

            double fleft, ftop, fwidth;
            TextBox ntb = (TextBox)sender;
            if (tb == null)
            {
                fleft = ntb.Margin.Left;
                ftop = ntb.Margin.Top;
                fwidth = ntb.Width;
            }
            else
            {
                //获得失去焦点的文本框的位置
                fleft = tb.Margin.Left;
                ftop = tb.Margin.Top;
                fwidth = tb.Width;

            }
            //获得获得焦点的文本框的位置
            double nleft = ntb.Margin.Left;
            double ntop = ntb.Margin.Top;
            double nwidth = ntb.Width;
            //开启动画效果
            
            //ThicknessAnimation ta = new ThicknessAnimation();
            SplineThicknessKeyFrame stk1 = new SplineThicknessKeyFrame();
            SplineThicknessKeyFrame stk2 = new SplineThicknessKeyFrame();
            ThicknessAnimationUsingKeyFrames du = new ThicknessAnimationUsingKeyFrames();
            

            stk1.Value = new Thickness(fleft, ftop, 0, 0);
            stk2.Value = new Thickness(nleft, ntop, 0, 0);

            stk1.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(0));
            stk2.KeyTime = KeyTime.FromTimeSpan(TimeSpan.FromMilliseconds(400));
            stk2.KeySpline = new KeySpline(0, 0, 0, 1);

            du.KeyFrames.Add(stk1);
            du.KeyFrames.Add(stk2);

            //ta.From = new Thickness(fleft,ftop,0,0);
            //ta.To = new Thickness(nleft, ntop, 0, 0);
            //ta.Duration = new Duration(TimeSpan.FromMilliseconds(200));



            Storyboard.SetTargetName(du, "Margin");
            Storyboard.SetTargetProperty(du, new PropertyPath(Border.MarginProperty));

            Storyboard storyBoard = new Storyboard();

            storyBoard.Children.Add(du);

            this.RegisterName("Margin", this.ColorFulBorder);


            DoubleAnimation ta = new DoubleAnimation();
            ta.From = 0;
            ta.To = 0.5;
            ta.Duration = new Duration(TimeSpan.FromMilliseconds(100));
            Storyboard.SetTargetName(ta, "Opacity");
            Storyboard.SetTargetProperty(ta, new PropertyPath(Border.OpacityProperty));
            Storyboard storyBoard2 = new Storyboard();
            storyBoard2.Children.Add(ta);
            this.RegisterName("Opacity", this.ColorFulBorder);
            storyBoard2.Begin(this, true);


            DoubleAnimation tw = new DoubleAnimation();
            tw.From = fwidth;
            tw.To = nwidth;
            tw.Duration = new Duration(TimeSpan.FromMilliseconds(100));
            Storyboard.SetTargetName(tw, "Width");
            Storyboard.SetTargetProperty(tw, new PropertyPath(Border.WidthProperty));
            Storyboard storyBoard3 = new Storyboard();
            storyBoard3.Children.Add(tw);
            this.RegisterName("Width", this.ColorFulBorder);
            storyBoard3.Begin(this, true);

            storyBoard.Begin(this, true);

            
        }

前台放个定义好的border,在文本框上绑定这俩个事件

posted @ 2012-05-11 18:56  AYUI框架  阅读(1293)  评论(1编辑  收藏  举报