在深圳已经工作了一个月了,之前做WinForm的,现在做WPF,每天加班到晚上10点,比之前累。学习新技术也是有个过程的,我就从基础的语法和
界面布局做起。这是我仿着做一个小软件。
效果图赏析
在原基础上增加了一个树叶飘动的效果。
主要代码如下:
<Canvas.Triggers>
<EventTrigger RoutedEvent="FrameworkElement.Loaded">
<BeginStoryboard>
<Storyboard Storyboard.TargetName="img1" Storyboard.TargetProperty="(Canvas.Left)">
<DoubleAnimation From="0" To="514" Duration="0:0:20" RepeatBehavior="23:59:59" AutoReverse="True"/>
</Storyboard>
</BeginStoryboard>
<BeginStoryboard Storyboard="{StaticResource StoryboardLeaf}"/>
</EventTrigger>
</Canvas.Triggers>
白云移动
树叶漂动 KeyTime=”0″ Value=”0″起始位置 KeyTime=”0:0:2″ Value=”20″转动的时间和角度(顺时针) KeyTime=”0:0:4″ Value=”0″最后
的状态
<Storyboard x:Key="StoryboardLeaf" RepeatBehavior="Forever">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children) [1].(RotateTransform.Angle)" Storyboard.TargetName="bd">
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:2" Value="20"/>
<EasingDoubleKeyFrame KeyTime="0:0:4" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
树叶漂动
this.ShowInTaskbar = false;//是否在任务栏显示
是否在任务栏显示
timer = new DispatcherTimer();//按时间间隔处理的类
timer.Interval = TimeSpan.Parse("00:00:01");//时间刻度的时间间隔,默认是00:00:00
timer.IsEnabled = true;
timer.Tick += new EventHandler(timer_Tick);//DispatcherTimer.Tick超过计时间隔时发生
设置时间间隔
BitmapImage dayOrNight = new BitmapImage();//建一张图片
dayOrNight.BeginInit();
string uri = "pack://application:,,,/WpfTimeZoneExample;component/Images/";
int nowHour = Int32.Parse(DateTime.Now.ToString("HH"));
if (nowHour >= && nowHour <=)
{
uri += "sun2.png";
DayMark.Width = ;
DayMark.Height = ;
}
else
{
uri += "moon.png";
DayMark.Width = ;
DayMark.Height = ;
}
dayOrNight.UriSource = new Uri(uri);//设置源
dayOrNight.EndInit();
DayMark.Source = dayOrNight;
代码创建一张图片
private void timer_Tick(object sender,EventArgs e)
{
CNT.Text = DateTime.Now.ToString("HH:mm:ss");
UST.Text = DateTime.Now.AddHours(-).ToString("HH:mm:ss");
UKT.Text = DateTime.Now.AddHours(-).ToString("HH:mm:ss");
PRT.Text = DateTime.Now.AddHours(-).ToString("HH:mm:ss");
SNT.Text = DateTime.Now.AddHours().ToString("HH:mm:ss");
BXT.Text = DateTime.Now.AddHours(-).ToString("HH:mm:ss");
}
间隔执行
private void Grid_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
this.DragMove();//拖拽
}
程序拖拽
鼠标放上去时,太阳/月亮 升降
private void DayMark_MouseEnter(object sender, MouseEventArgs e)
{
TranslateTransform trans = new TranslateTransform();//TransformGroup
DayMark.RenderTransform = trans;//设置平移的对象
DoubleAnimation animation = new DoubleAnimation(, TimeSpan.FromSeconds());//15为目标值,后一个参数是动画持续时间
animation.AutoReverse = true;//是否以相反的顺序播放
trans.BeginAnimation(TranslateTransform.YProperty, animation);//TranslateTransform.YProperty,沿X,Y移动的属性。BeginAnimation应用动画
}
鼠标事件
最后说明一下,本程序开发环境:VS2013 运行环境:.Net4.0 源码下载:区时浏览小程序