zoukankan      html  css  js  c++  java
  • silverlight2中的定时器,以及如何动态改变控件的坐标

    参考了园子里nasa写里的定时器的用法,以及旋转木马的部分代码,弄了一个小小的示例,贴在这里方便以后备查

    目的:让某一个控件沿着圆形轨迹运动

    xaml:采用Canvas布局,通过动态修改控件的Margin值来改变位置

    cs代码:利用定时器触发来设置Margin值 

    xaml内容:

    Code
    <UserControl
        
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x
    ="http://schemas.microsoft.com/winfx/2006/xaml"
        x:Class
    ="SilverlightApplication2.Page"
        Width
    ="300" Height="300" xmlns:vsm="clr-namespace:System.Windows;assembly=System.Windows" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d">    

        
    <Canvas x:Name="LayoutRoot" Background="White">
            
            
    <TextBlock x:Name="txtTime" Height="10" Width="10" Text="A" Canvas.Left="10" Canvas.Top="10" FontSize="12" Foreground="Red" />
            
    <Ellipse Height="200" Width="200" Canvas.Left="10" Canvas.Top="10" Fill="{x:Null}" Stroke="#22000000" Canvas.ZIndex="-1"/>
            
           
        
    </Canvas>
    </UserControl>

    cs代码:

    Code
    using System;
    using System.Windows.Controls;
    using System.Windows.Threading;

    namespace SilverlightApplication2
    {
        
    public partial class Page : UserControl
        {
            
    public Page()
            {
               
                InitializeComponent();
                DispatcherTimer dt 
    = new DispatcherTimer();
                dt.Interval 
    = new TimeSpan(0000100); // 50 Milliseconds
                dt.Tick += new EventHandler(dt_Tick);
                dt.Start();   
            }

            
    int angle = 0;
            
    int radius = 100;        

            
    void dt_Tick(object sender, EventArgs e)
            {
                
                angle 
    = angle + 1;
                txtTime.Text 
    = new System.Random().Next(110).ToString();
                
    //Margin.Left = 半径*sin(角度),Margin.Top = 半径*cos(角度)--注意:角度要换成弧度,同时加上平移量
                txtTime.Margin = new System.Windows.Thickness(radius * Math.Cos(angle * Math.PI / 180+ radius, radius * Math.Sin(angle * Math.PI / 180+ radius, 00);
                
    if (angle > 360) { angle = 0; }
            }


        }
    }
    作者:菩提树下的杨过
    出处:http://yjmyzz.cnblogs.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    HDU4366 Successor 线段树+预处理
    POJ2823 Sliding Window 单调队列
    HDU寻找最大值 递推求连续区间
    UVA846 Steps 二分查找
    HDU3415 Max Sum of MaxKsubsequence 单调队列
    HDU时间挑战 树状数组
    UVA10168 Summation of Four Primes 哥德巴赫猜想
    UESTC我要长高 DP优化
    HDUChess 递推
    HDU4362 Dragon Ball DP+优化
  • 原文地址:https://www.cnblogs.com/yjmyzz/p/1424346.html
Copyright © 2011-2022 走看看