潜移默化学会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,在文本框上绑定这俩个事件