在论坛中看到经常有人碰到如何在SilverLight多个页面或者控件中传替参数或者值的问题,今天抽空通过Delegate机制实现回调实例方法重设动画参数的DEMO,分享给大家。最终结果如图:

在论坛中看到经常有人碰到如何在SilverLight多个页面或者控件中传替参数或者值的问题,今天抽空通过Delegate机制实现回调实例方法重设动画参数的DEMO,分享给大家。最终结果如图:


 

演示地址:http://xingjunli.webs.com/DelegateDemo.html
    参考资料:动画概述:http://msdn.microsoft.com/zh-cn/library/cc189019(VS.95).aspx 委托:http://msdn.microsoft.com/zh-cn/library/900fyy8e.aspx
   1、初识委托:
      委托delegate有点类似于非托管C/C++中的函数指针,在C#中通过委托机制来回掉实例方法,静态方法等(更重要是委托为托管代码,能保证回调方法的类型的安全)
   2、使用委托回调实例方法:   
      2.1、用C#的delegate关键字来定义回掉函数的签名(本示例中我们通过一个单独的类来实义委托以提高重用):
 
view plaincopy to clipboardprint?
01./// <summary>   
02.        /// 声明delegate方法   
03.        /// </summary>   
04.        /// <param name="x"></param>   
05.        /// <param name="y"></param>   
06.        public delegate void delgateResetParentMethod(double x,double y);  
/// <summary>
        /// 声明delegate方法
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        public delegate void delgateResetParentMethod(double x,double y);  
     2.2、在子窗体类中我们定义一个委托类型对象如:
 
view plaincopy to clipboardprint?
01.public helper.delgateResetParentMethod CallBackMethod;  
public helper.delgateResetParentMethod CallBackMethod; 
     2.3、在父窗体中实例化子窗体时将实例方法传递给委托:
  
view plaincopy to clipboardprint?
01.UCDelegateChildWindow childWindow = new UCDelegateChildWindow();   
02.                childWindow.CallBackMethod = ReaplayAnimation;   
UCDelegateChildWindow childWindow = new UCDelegateChildWindow();
                childWindow.CallBackMethod = ReaplayAnimation;

2.4、用我们熟悉的方法调用语法来调用回掉函数:

view plaincopy to clipboardprint?
01.    if (this.DialogResult.Value && CallBackMethod != null)   
02.    {   
03.this.CallBackMethod(Double.Parse(txtX.Text), Double.Parse(txtY.Text));   
04.this.Close();   
05.    }  
      if (this.DialogResult.Value && CallBackMethod != null)
      {
  this.CallBackMethod(Double.Parse(txtX.Text), Double.Parse(txtY.Text));
  this.Close();
      }

3、上面我们应用委托实现了最简单的应用,实际工作中会复杂的多;我们的编译器和CLR为我们做了大量幕后工作以减轻使用的复杂性;如需了解更多请参考:委托(C# 编程指南)http://msdn.microsoft.com/zh-cn/library/ms173171.aspx
   实现步骤(附源代码):
     声明委托类型:

view plaincopy to clipboardprint?
01.public class helper   
02.{   
03.       /// <summary>   
04.       /// 声明delegate方法   
05.       /// </summary>   
06.       /// <param name="x"></param>   
07.       /// <param name="y"></param>   
08.       public delegate void delgateResetParentMethod(double x,double y);   
09.}  
 public class helper
 {
        /// <summary>
        /// 声明delegate方法
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        public delegate void delgateResetParentMethod(double x,double y);
 } 
    子窗体XAML:

view plaincopy to clipboardprint?
01.<controls:ChildWindow x:Class="LoadSilverlight.UCDelegateChildWindow"  
02.           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
03.           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"    
04.           xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"  
05.           Width="200" Height="170"    
06.           Title="重设动画坐标:">   
07.    <Grid x:Name="LayoutRoot" Margin="2">   
08.        <Grid.RowDefinitions>   
09.            <RowDefinition />   
10.            <RowDefinition Height="Auto" />   
11.        </Grid.RowDefinitions>   
12.        <Canvas Grid.Row="0" Grid.Column="0" Margin="1">   
13.            <Canvas.Background>   
14.                <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">   
15.                    <GradientStop Color="#E6E0F3F4" Offset="0"/>   
16.                    <GradientStop Color="#FFB3BDC7" Offset="1"/>   
17.                </LinearGradientBrush>   
18.            </Canvas.Background>   
19.            <TextBlock Text="X:" Canvas.Left="11" Canvas.Top="8" />   
20.            <TextBox x:Name="txtX" Canvas.Left="28" Canvas.Top="8" Width="140" Text="100" />   
21.                <TextBlock Text="Y:" Canvas.Left="12" Canvas.Top="46" RenderTransformOrigin="0.417,1.375" />   
22.            <TextBox x:Name="txtY" Canvas.Left="28" Canvas.Top="44" Width="140" Text="100"/>   
23.        </Canvas>   
24.            <Button x:Name="CancelButton" Content="Cancel" Click="CancelButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,0,0" Grid.Row="1" />   
25.        <Button x:Name="OKButton" Content="OK" Click="OKButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,79,0" Grid.Row="1" />   
26.    </Grid>   
27.</controls:ChildWindow>  
<controls:ChildWindow x:Class="LoadSilverlight.UCDelegateChildWindow"
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
           xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
           Width="200" Height="170" 
           Title="重设动画坐标:">
    <Grid x:Name="LayoutRoot" Margin="2">
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Canvas Grid.Row="0" Grid.Column="0" Margin="1">
         <Canvas.Background>
          <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
           <GradientStop Color="#E6E0F3F4" Offset="0"/>
           <GradientStop Color="#FFB3BDC7" Offset="1"/>
          </LinearGradientBrush>
         </Canvas.Background>
            <TextBlock Text="X:" Canvas.Left="11" Canvas.Top="8" />
            <TextBox x:Name="txtX" Canvas.Left="28" Canvas.Top="8" Width="140" Text="100" />
                <TextBlock Text="Y:" Canvas.Left="12" Canvas.Top="46" RenderTransformOrigin="0.417,1.375" />
            <TextBox x:Name="txtY" Canvas.Left="28" Canvas.Top="44" Width="140" Text="100"/>
        </Canvas>
            <Button x:Name="CancelButton" Content="Cancel" Click="CancelButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,0,0" Grid.Row="1" />
        <Button x:Name="OKButton" Content="OK" Click="OKButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,79,0" Grid.Row="1" />
    </Grid>
</controls:ChildWindow> 
    子窗体CS:

view plaincopy to clipboardprint?
01.using System;   
02.using System.Collections.Generic;   
03.using System.Linq;   
04.using System.Net;   
05.using System.Windows;   
06.using System.Windows.Controls;   
07.using System.Windows.Documents;   
08.using System.Windows.Input;   
09.using System.Windows.Media;   
10.using System.Windows.Media.Animation;   
11.using System.Windows.Shapes;   
12.  
13.namespace LoadSilverlight   
14.{   
15.    public partial class UCDelegateChildWindow : ChildWindow   
16.    {   
17.        public UCDelegateChildWindow()   
18.        {   
19.            InitializeComponent();   
20.        }   
21.  
22.        private void OKButton_Click(object sender, RoutedEventArgs e)   
23.        {   
24.            this.DialogResult = true;   
25.            if (this.DialogResult.Value && CallBackMethod != null)   
26.            {   
27.                this.CallBackMethod(Double.Parse(txtX.Text), Double.Parse(txtY.Text));   
28.                this.Close();   
29.            }   
30.              
31.        }   
32.  
33.        private void CancelButton_Click(object sender, RoutedEventArgs e)   
34.        {   
35.            this.DialogResult = false;   
36.        }   
37.  
38.        //定义页面委托对象   
39.        public helper.delgateResetParentMethod CallBackMethod;   
40.           
41.    }   
42.}  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace LoadSilverlight
{
    public partial class UCDelegateChildWindow : ChildWindow
    {
        public UCDelegateChildWindow()
        {
            InitializeComponent();
        }

private void OKButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = true;
            if (this.DialogResult.Value && CallBackMethod != null)
            {
                this.CallBackMethod(Double.Parse(txtX.Text), Double.Parse(txtY.Text));
                this.Close();
            }
           
        }

private void CancelButton_Click(object sender, RoutedEventArgs e)
        {
            this.DialogResult = false;
        }

//定义页面委托对象
        public helper.delgateResetParentMethod CallBackMethod;
        
    }
}

父窗体XAML:

view plaincopy to clipboardprint?
01.<UserControl x:Class="LoadSilverlight.UCDelegateParent"  
02.    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"    
03.    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Background="#FF333333" Foreground="{x:Null}">   
04.    <UserControl.Resources>   
05.        <Storyboard x:Name="sbRun">   
06.            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="ellipse" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">   
07.                <EasingDoubleKeyFrame KeyTime="00:00:00" Value="0"/>   
08.                <EasingDoubleKeyFrame KeyTime="00:00:06" Value="200">   
09.                    <EasingDoubleKeyFrame.EasingFunction>   
10.                        <ElasticEase EasingMode="EaseOut"/>   
11.                    </EasingDoubleKeyFrame.EasingFunction>   
12.                </EasingDoubleKeyFrame>   
13.            </DoubleAnimationUsingKeyFrames>   
14.            <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="ellipse" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)">   
15.                <EasingDoubleKeyFrame KeyTime="00:00:00" Value="0"/>   
16.                <EasingDoubleKeyFrame KeyTime="00:00:06" Value="200">   
17.                    <EasingDoubleKeyFrame.EasingFunction>   
18.                        <ElasticEase EasingMode="EaseOut"/>   
19.                    </EasingDoubleKeyFrame.EasingFunction>   
20.                </EasingDoubleKeyFrame>   
21.            </DoubleAnimationUsingKeyFrames>   
22.        </Storyboard>   
23.    </UserControl.Resources>   
24.    <Grid x:Name="LayoutRoot" Background="#FF424242">   
25.        <Ellipse x:Name="ellipse" Height="64" HorizontalAlignment="Left" Margin="25,32,0,0" VerticalAlignment="Top" Width="64" RenderTransformOrigin="0.5,0.5">   
26.            <Ellipse.RenderTransform>   
27.                <TransformGroup>   
28.                    <ScaleTransform/>   
29.                    <SkewTransform/>   
30.                    <RotateTransform/>   
31.                    <TranslateTransform x:Name="ellipseTrans"/>   
32.                </TransformGroup>   
33.            </Ellipse.RenderTransform>   
34.            <Ellipse.Fill>   
35.                <RadialGradientBrush RadiusX="0.559" RadiusY="0.559">   
36.                    <GradientStop Color="#FFFF0606"/>   
37.                    <GradientStop Color="#72702525" Offset="0.717"/>   
38.                    <GradientStop Color="#00702525" Offset="1"/>   
39.                </RadialGradientBrush>   
40.            </Ellipse.Fill>   
41.        </Ellipse>   
42.        <Button x:Name="btnReset" Height="33" HorizontalAlignment="Right" Margin="0,0,8,8" VerticalAlignment="Bottom" Width="100" Content="重设坐标" FontFamily="微软雅黑" FontWeight="Bold" FontSize="18.667"/>   
43.        <HyperlinkButton HorizontalAlignment="Right" Margin="8,0,116,15" VerticalAlignment="Bottom" Content="http://Blog.csdn.net/xingjunli" NavigateUri="http://Blog.csdn.net/xingjunli" FontStyle="Italic"/>   
44.           
45.    </Grid>   
46.</UserControl>  
<UserControl x:Class="LoadSilverlight.UCDelegateParent"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Background="#FF333333" Foreground="{x:Null}">
 <UserControl.Resources>
  <Storyboard x:Name="sbRun">
   <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="ellipse" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)">
    <EasingDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
    <EasingDoubleKeyFrame KeyTime="00:00:06" Value="200">
     <EasingDoubleKeyFrame.EasingFunction>
      <ElasticEase EasingMode="EaseOut"/>
     </EasingDoubleKeyFrame.EasingFunction>
    </EasingDoubleKeyFrame>
   </DoubleAnimationUsingKeyFrames>
   <DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="ellipse" Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)">
    <EasingDoubleKeyFrame KeyTime="00:00:00" Value="0"/>
    <EasingDoubleKeyFrame KeyTime="00:00:06" Value="200">
     <EasingDoubleKeyFrame.EasingFunction>
      <ElasticEase EasingMode="EaseOut"/>
     </EasingDoubleKeyFrame.EasingFunction>
    </EasingDoubleKeyFrame>
   </DoubleAnimationUsingKeyFrames>
  </Storyboard>
 </UserControl.Resources>
    <Grid x:Name="LayoutRoot" Background="#FF424242">
     <Ellipse x:Name="ellipse" Height="64" HorizontalAlignment="Left" Margin="25,32,0,0" VerticalAlignment="Top" Width="64" RenderTransformOrigin="0.5,0.5">
      <Ellipse.RenderTransform>
       <TransformGroup>
        <ScaleTransform/>
        <SkewTransform/>
        <RotateTransform/>
        <TranslateTransform x:Name="ellipseTrans"/>
       </TransformGroup>
      </Ellipse.RenderTransform>
      <Ellipse.Fill>
       <RadialGradientBrush RadiusX="0.559" RadiusY="0.559">
        <GradientStop Color="#FFFF0606"/>
        <GradientStop Color="#72702525" Offset="0.717"/>
        <GradientStop Color="#00702525" Offset="1"/>
       </RadialGradientBrush>
      </Ellipse.Fill>
     </Ellipse>
     <Button x:Name="btnReset" Height="33" HorizontalAlignment="Right" Margin="0,0,8,8" VerticalAlignment="Bottom" Width="100" Content="重设坐标" FontFamily="微软雅黑" FontWeight="Bold" FontSize="18.667"/>
     <HyperlinkButton HorizontalAlignment="Right" Margin="8,0,116,15" VerticalAlignment="Bottom" Content="http://Blog.csdn.net/xingjunli" NavigateUri="http://Blog.csdn.net/xingjunli" FontStyle="Italic"/>
     
    </Grid>
</UserControl>
 
    父窗体CS:

view plaincopy to clipboardprint?
01.using System;   
02.using System.Collections.Generic;   
03.using System.Linq;   
04.using System.Net;   
05.using System.Windows;   
06.using System.Windows.Controls;   
07.using System.Windows.Documents;   
08.using System.Windows.Input;   
09.using System.Windows.Media;   
10.using System.Windows.Media.Animation;   
11.using System.Windows.Shapes;   
12.  
13.namespace LoadSilverlight   
14.{   
15.    public partial class UCDelegateParent : UserControl   
16.    {   
17.        UCDelegateChildWindow childWindow;   
18.        public UCDelegateParent()   
19.        {   
20.            InitializeComponent();   
21.            btnReset.Click += new RoutedEventHandler(btnReset_Click);   
22.            sbRun.Completed += new EventHandler(sbRun_Completed);   
23.            this.Loaded += new RoutedEventHandler(UCDelegateParent_Loaded);   
24.        }   
25.  
26.        void UCDelegateParent_Loaded(object sender, RoutedEventArgs e)   
27.        {   
28.            sbRun.Begin();   
29.        }   
30.  
31.        void sbRun_Completed(object sender, EventArgs e)   
32.        {   
33.            ShowChildWindow();   
34.        }   
35.  
36.        void btnReset_Click(object sender, RoutedEventArgs e)   
37.        {   
38.            ShowChildWindow();   
39.        }   
40.        private void ShowChildWindow()   
41.        {   
42.            if (childWindow == null)   
43.            {   
44.                childWindow = new UCDelegateChildWindow();   
45.                childWindow.CallBackMethod = ReaplayAnimation; //为子窗体(可以是任意窗体或者控件)注册父窗体实例方法(这里的参数类型和个数必须匹配)   
46.            }   
47.            childWindow.Show();   
48.        }   
49.  
50.        //父窗体重设动画属性播放动画   
51.        private void ReaplayAnimation(double x,double y)   
52.        {   
53.  
54.            DoubleAnimationUsingKeyFrames framsX = sbRun.Children[0] as DoubleAnimationUsingKeyFrames;   
55.            DoubleAnimationUsingKeyFrames framsY = sbRun.Children[1] as DoubleAnimationUsingKeyFrames;   
56.               
57.            framsX.KeyFrames[0].Value = framsX.KeyFrames[1].Value;   
58.            framsX.KeyFrames[1].Value = x;   
59.            framsY.KeyFrames[0].Value = framsY.KeyFrames[1].Value;   
60.            framsY.KeyFrames[1].Value = y;   
61.               
62.            sbRun.Stop();   
63.            sbRun.Begin();   
64.        }   
65.    }   
66.}  
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;

namespace LoadSilverlight
{
    public partial class UCDelegateParent : UserControl
    {
        UCDelegateChildWindow childWindow;
        public UCDelegateParent()
        {
            InitializeComponent();
            btnReset.Click += new RoutedEventHandler(btnReset_Click);
            sbRun.Completed += new EventHandler(sbRun_Completed);
            this.Loaded += new RoutedEventHandler(UCDelegateParent_Loaded);
        }

void UCDelegateParent_Loaded(object sender, RoutedEventArgs e)
        {
            sbRun.Begin();
        }

void sbRun_Completed(object sender, EventArgs e)
        {
            ShowChildWindow();
        }

void btnReset_Click(object sender, RoutedEventArgs e)
        {
            ShowChildWindow();
        }
        private void ShowChildWindow()
        {
            if (childWindow == null)
            {
                childWindow = new UCDelegateChildWindow();
                childWindow.CallBackMethod = ReaplayAnimation; //为子窗体(可以是任意窗体或者控件)注册父窗体实例方法(这里的参数类型和个数必须匹配)
            }
            childWindow.Show();
        }

//父窗体重设动画属性播放动画
        private void ReaplayAnimation(double x,double y)
        {

DoubleAnimationUsingKeyFrames framsX = sbRun.Children[0] as DoubleAnimationUsingKeyFrames;
            DoubleAnimationUsingKeyFrames framsY = sbRun.Children[1] as DoubleAnimationUsingKeyFrames;
            
            framsX.KeyFrames[0].Value = framsX.KeyFrames[1].Value;
            framsX.KeyFrames[1].Value = x;
            framsY.KeyFrames[0].Value = framsY.KeyFrames[1].Value;
            framsY.KeyFrames[1].Value = y;
            
            sbRun.Stop();
            sbRun.Begin();
        }
    }
}
 
  结束语:SilverLight同.Net FrameWork本身已经很好的结合起来,C#中一些实用的编程机制(如:委托),在SL中合理运用,将给我们带来意想不到的收获!

巧用Delegate在Silverlight多个页面、控件中传递回调方法相关推荐

  1. Xamarin iOS教程之页面控件

    Xamarin iOS教程之页面控件 Xamarin iOS 页面控件 在iPhone手机的主界面中,经常会看到一排小白点,那就是页面控件,如图2.44所示.它是由小白点和滚动视图组成,可以用来控制翻 ...

  2. Silverlight实用窍门系列:51.Silverlight页面控件的放大缩小、Silverlight和Html控件的互相操作...

    本节将讲述三个Silverlight中应用的小技巧:Silverlight页面的放大缩小.Silverlight操作Html.Html操作Silverlight控件. 一.Silverlight页面的 ...

  3. 稳扎稳打Silverlight(33) - 3.0控件之AutoCompleteBox, DataPager

    [索引页] [源码下载] 稳扎稳打Silverlight(33) - 3.0控件之AutoCompleteBox, DataPager 作者:webabcd 介绍 Silverlight 3.0 控件 ...

  4. 在用户控件中操作父页面上的控件

    ((TextBox)this.Page.FindControl("父页面控件名")).text="";  转载于:https://www.cnblogs.com ...

  5. 关于从页面中获取用户控件中的其它控件(如DropDownList)事件的方法

    在项目中经常把一些经常使用的代码做成用户控件以提高代码的可重用性, 一个经常遇到的就是在页面中调用用户控件中的服务器控件的事件,下面给出简单的代码示列. 我们在一个用户控件(MaterialRepor ...

  6. .net dataGridView当鼠标经过时当前行背景色变色;然后【给GridView增加单击行事件,并获取单击行的数据填充到页面中的控件中】...

    1.首先在前台dataGridview属性中增加onRowDataBound属性事件 2.然后在后台Observing_RowDataBound事件中增加代码 protected void Obser ...

  7. 一个.net的系统的AOP设计思路二——页面控件校验映射

    3)写页面控件校验映射.我们的基础是建立在验证控件的基础上的.配置文件如下: <?xml version="1.0" encoding="utf-8" ? ...

  8. JS判断页面控件是否可用

    JS判断页面控件是否可用[原创] 2009-12-08 16:27 如果你看到这篇文章,甚至目前正愁于该问题的困扰,希望你把这篇文章看完.至少下次不会在这个问题上浪费时间. 近期做的项目中涉及到页面控 ...

  9. asp.net 页面从初始化到卸载事件顺序(及对页面控件调用)完整列表【转】

    asp.net 页面从初始化到卸载事件顺序(及对页面控件调用)完整列表[转] 客户发出POST请求-〉创建Page派生类,调用构造函数-〉调用Page类的IHttpHandler.ProcessReq ...

最新文章

  1. android EditText 修改光标的颜色值
  2. Memcached在大型网站中应用
  3. C#序列化反序列化对象为base64字符串
  4. PPT 下载|神策数据业务咨询师成林松:社交裂变的场景化分析
  5. Python 和 C/C++ 拓展程序的性能优化
  6. 【Boost】boost库asio详解6——boost::asio::error的用法浅析
  7. 浅谈Aho-Corasick automaton(AC自动机)
  8. 几何画板手机版_运用几何画板解决动点最值问题(二)
  9. Git教程——为什么要掌握Git以及Git的安装
  10. Atitit.木马病毒的免杀原理---sikuli 的使用
  11. canvas 小球碰撞
  12. Java——线程回顾汇总:同步/生产者消费者模式/定时调度
  13. 货币金融学(4): 商业银行业务/央行
  14. option样式美化 css,CSS select样式优化
  15. 第二类曲面积分某问题
  16. 【Unity】Obi插件系列(四)—— Distance Fields、Particle attachments、Particle rendering
  17. kali linux窗口变大,kali怎么把屏幕放大
  18. 大数据破获网售假耐克案
  19. 长期置顶:作为一个技术人,你为什么有时间写博客?准备应对未来的中年危机
  20. web前端框架开发实例,html5元素大全

热门文章

  1. linux Enterprise5 添加删除程序无法正常使用 解决
  2. 使用tar进行磁带备份的命令汇总
  3. 网易AI孵化项目获上亿元首轮融资,主打AR+AI
  4. 要让人人能AI的百度EasyDL,现在怎么样了?
  5. 亚马逊AI惹众怒:一个没有意识的程序,竟然自己学会了“重男轻女”
  6. 迁移学习比赛:OpenAI喊你重温「音速小子索尼克」
  7. 如何正确看待LeCun工作调整?听听FAIR研究员们现身说法
  8. react离开页面,自定义弹框拦截,路由拦截
  9. 一个优雅地探索相关性的新可视化方法
  10. 第一周(7.11)作业——1、自我介绍;2、决心书