Silverlight动态加载菜单和菜单动画

Xaml代码: 容器这里改用StackPanel,外面嵌套ScrollViewer,内容超出后可以下拉

 代码如下 复制代码

<ScrollViewer x:Name="scrolls" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
  <StackPanel x:Name="Panel_Road" Margin="0,10">
  </StackPanel>
</ScrollViewer>

Xam.cs 代码:  T代表你定义的对象

 

 代码如下 复制代码

using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using Microsoft.Phone.Controls;
using System.Windows.Media.Imaging;

namespace PhoneTest1
{
    public partial class MaainPage : PhoneApplicationPage
    {
        /// <summary>
        /// 记录最后一次点击
        /// </summary>
        Canvas _LastCanvas = new Canvas();

        /// <summary>
        /// 动画图片
        /// </summary>
        Image Img_Story = new Image();

        /// <summary>
        /// 定义白色
        /// </summary>
        SolidColorBrush WhiteColorBrush = new SolidColorBrush();

        /// <summary>
        /// 定义灰色
        /// </summary>
        SolidColorBrush OtherColorBrush = new SolidColorBrush();

        public MainPage()
        {
            InitializeComponent();
            this.Loaded += new RoutedEventHandler(MainPage_Loaded);
        }

        void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            //设置颜色
            WhiteColorBrush.Color = Color.FromArgb(255, 255, 255, 255);
            OtherColorBrush.Color = Color.FromArgb(255, 61, 61, 61);
            Boolean _IsFirstAddElement = false;
            for (int i = 0; i < 10; i++)
            {
                Canvas _Canvas = new Canvas();
                _Canvas.Height = 60;
                TextBlock _TextBlock = new TextBlock();
                _TextBlock.Text = i.ToString() + ":测试程序"; //你自己重命名
                Canvas.SetLeft(_TextBlock, 30); //30是距canvas左边,你自己可以调整
                Canvas.SetZIndex(_TextBlock, 100); //设置图层,防止文本被遮盖
                _TextBlock.FontSize = 30;
                _Canvas.Children.Add(_TextBlock);
                if (!_IsFirstAddElement)
                {
                    _IsFirstAddElement = true;
                    this.Img_Story.Source = new BitmapImage(new Uri("/PhoneTest1;component/Image/Test.PNG", UriKind.RelativeOrAbsolute));
                    Canvas.SetLeft(Img_Story, 0); //30是距canvas左边,你自己可以调整
                    Canvas.SetZIndex(Img_Story, 0); //设置图层,防止文本被遮盖
                    _Canvas.Children.Add(this.Img_Story);
                    this._LastCanvas = _Canvas;
                    _TextBlock.Foreground = WhiteColorBrush;
                }
                else
                {
                    _TextBlock.Foreground = OtherColorBrush;
                }
                //点击事件
                _TextBlock.MouseLeftButtonDown += new MouseButtonEventHandler(_TextBlock_MouseLeftButtonDown);
                //将元素添加到容器中
                this.Panel_Element.Children.Add(_Canvas);
            }
        }

        /// <summary>
        /// 点击事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void _TextBlock_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            TextBlock Txt_Road = sender as TextBlock;
            //检索页面元素,设置文字颜色
            foreach (FrameworkElement fe in this.Panel_Element.Children)
            {
                if (fe is Canvas)    //检索TextBlock
                {
                    Canvas _Canvas = (Canvas)fe;
                    TextBlock chk = (TextBlock)_Canvas.Children[0];
                    if (chk.Equals(Txt_Road))
                    {
                        _LastCanvas.Children.Remove(this.Img_Story);
                        _Canvas.Children.Add(this.Img_Story);
                        this._LastCanvas = _Canvas;
                        chk.Foreground = WhiteColorBrush;   //当前点击的设为白色
                        CreateStoryBoard();
                    }
                    else
                    {
                        chk.Foreground = OtherColorBrush;   //其他的改变回原来默认颜色
                    }
                }
            }
        }

        /// <summary>
        /// 创建点击动画
        /// </summary>
        private void CreateStoryBoard()
        {
            Storyboard storyboard = new Storyboard();   //实例化Storyboard
            //实例化X轴动画对象
            DoubleAnimation doubleAnimationX = new DoubleAnimation();
            doubleAnimationX.Duration = new Duration(TimeSpan.FromMilliseconds(500));   //设置动画延时时间
            doubleAnimationX.From = 0;     //设置动画初始值
            doubleAnimationX.To = 10;    //设置动画完成值
            Storyboard.SetTarget(doubleAnimationX, this.Img_Story);     //设置动画操作对象
            Storyboard.SetTargetProperty(doubleAnimationX, new PropertyPath("(Canvas.Left)"));      //设置动画操作对象的属性
            storyboard.Children.Add(doubleAnimationX);      //将动画加载到Storyboard
            //开始动画
            storyboard.Begin();
        }
    }
}

时间: 2024-10-01 01:29:47

Silverlight动态加载菜单和菜单动画的相关文章

Silverlight动态加载DLL

问题 今天手头的项目遇到一个问题,为了描述这个问题,我建立了一个简单的项目,结构如下: 问题是这样的: 1,silverlightApplication1中有一个按钮,点击后弹出窗口:silverlightApplication6中只有一个canvas来放置从SilverlightApplication1.dll反射得到的控件. 2,silverlightApplication6中动态加载了silverlightApplication1的SilverlightApplication1.dll文件

一起谈.NET技术,Silverlight动态加载DLL

问题 今天手头的项目遇到一个问题,为了描述这个问题,我建立了一个简单的项目,结构如下: 问题是这样的: 1,silverlightApplication1中有一个按钮,点击后弹出窗口:silverlightApplication6中只有一个canvas来放置从SilverlightApplication1.dll反射得到的控件. 2,silverlightApplication6中动态加载了silverlightApplication1的SilverlightApplication1.dll文件

从XML中动态加载菜单的示例

本文配套源码 这个案例是一个基于VS2005的WinForm菜单控件的例子,功能是从XML中动态加载菜单数据到MenuTrip控件上.这个案例中用到了XML,反射之类的技术.当然实用价值有限,仅供学习参考之用. 首先创建一个WinForm项目,在Form1上放置一个MenuTrip控件,将其命名为MainMenu. 在项目中添加一个XML文件,命名为Menu.xml,代码如下: MenuXml 1<?xml version="1.0" encoding="utf-8&q

vc++-VC++ MFC 根据不同用户加载不同的菜单,求帮助,谢谢啦

问题描述 VC++ MFC 根据不同用户加载不同的菜单,求帮助,谢谢啦 设定变量m_power=1加载MAINMENU菜单,m_power=0,加载MENU3菜单,这是我写的,为什么无论m_power等于1或0都加载的是MAINMENU? 解决方案 应该是: if(g_power == 1),而不是赋值 = 解决方案二: if(g_power = 1)..这个错误太低级了..g_power = 1赋值返回永远是真 解决方案三: 判断的时候最好是把常量写在==的左边. 解决方案四: 谢谢你们!!!

发现一个.Net中动态加载控件时关于焦点方面的Bug

动态|加载|控件 今天写一个系统框架的时候用到了动态加载,调试的时候发现程序经常会出现死锁的情况,而且死锁的时候还会打开一个"WindowsFormsParkingWindow"后台进程,跑到网上查了半天关于WindowsFormsParkingWindow的资料,结果中文的一篇没找到,蝇文的倒有几篇,对着金山词霸费了九牛二虎之力还没看出个道道来.后来干脆新建了一个项目,只写了几行代码,结果运行的时候发现还是会有死缩的情况: 1.新建一个windows应用程序 2.添加一个UserCo

如何动态加载控件以及插件编程思想(C#)

编程|动态|加载|控件 关键词:动态加载,控件,插件 控件,在实现快速开发中起着非常重要的作用,它可以将某一特定功能封装起来,供可户程序员调用,更重要的是它还可以实现插件式开发,使软件的灵活性.可扩充性大大增强.在网络上,也有很多动态加载控件.动态调用类成员等的资料.下面,我就将动态加载控件总结一下,以供大家参考.(不过由于本人水平有限,不一定有参考价值,写出来一方面是为了总结自己,以求提高,另一方面也希望各为朋友看到我的不足,给我提出宝贵意见)一.动态加载控件 动态加载,最基本用到的就是反射机

使用ExtJs开发MIS系统(2):Js的动态加载

对于一个复杂的系统来说,客户端的JS可能会有上百个,如果全部加载到用户的浏览器中,一方面会导致多余的网络传输,另一方面浏览器解析大量的Js会导致性能下降,这两点都会显著的影响用户可察觉性能.所以对于Js的加载,是动态进行的,这个动态进行表现为两种方式: 能不加载的Js就绝不加载. 需要加载的Js在直到确实用到的时候才加载. 1,能不加载的Js就绝不加载 拿登陆的流程为例: 开发MIS系统(2):Js的动态加载-">尝试登陆包含两种情况,一种是用户刷新页面时,尝试根据当前的令牌自动登陆,另一

Android ViewPager制作新手导航页(动态加载)_Android

我们来讲个老生常谈的话题,估计大家都用过的->ViewPager,用它来做新手导航页面,虽然这次也是讲这个,但是和以往的用法可能有些不同,大家都看到标题进来的,应该知道的是:动态加载指示器. 什么叫动态加载呢,是不是感觉很高大上呢,其实呢就是动态的去加载指示器的数量的,而不是在布局文件中写死.希望看了这篇文章大家对ViewPager有新的认识. 看到这个效果大家应该都很不屑吧,今天讲这个就是为了让大家有新的认识.好了,好好听,开始了. 这个动态加载就是为了动态的加载下面的灰色圆点指示器和红色圆点

listview-android scrollview动态加载数据

问题描述 android scrollview动态加载数据 先声明不是滑动加载更多数据,我要做一个订单的页面,scrollview里面的内容不确定是几条,如果里面嵌套listview,每个item的布局太复杂(包含很多按钮,edittext,下拉菜单等等),很容易冲突,而且item的高度可能超过了一屏幕,scrollview嵌套listview问题又很多,所以请高手帮忙,该如何实现!谢谢各位了! 解决方案 可以在- (void)scrollViewDidEndDecelerating:(UISc