Silverlight 2 DispatcherTimer和通过XAML创建UI元素

简介:
XAML标签元素在silverlight运行时被转换成相应的对象,通过XamlReader类的Load方法,动态创建UI元素:
  1. 指定一条XAML内容字符串,为按照XML规则运行,XamlReader.Load()现在需要你在你的XAML文件中指定一个xmlns;
  2. 通过XamlReader.Load方法把元素在内存中编译(这样就可以得到UI元素对象的引用,也有可能是null,或者报错);
  3. 最后把它添加到容器的子控件中。
下面我们来制作一个简单的时钟,Page.xaml如下:
<UserControl x:Class="OpenXmlVideo2.Page"
    xmlns=" [url]http://schemas.microsoft.com/client/2007[/url]"
    xmlns:x=" [url]http://schemas.microsoft.com/winfx/2006/xaml[/url]"
    Width="187" Height="97">
    <Canvas x:Name="EClock" Height="97" Width="187" >
    </Canvas>
</UserControl>
Page.xaml.cs如下:
using  System;
using  System.Collections.Generic;
using  System.Linq;
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;
using  System.Windows.Markup; 

namespace  OpenXmlVideo2
{
    
public partial class Page : UserControl
    
{
        
private TextBlock textBlock1;
        
private System.Windows.Threading.DispatcherTimer timer; 

        
public Page()
        
{
            InitializeComponent();
            
this.Loaded += new RoutedEventHandler(Page_Loaded); 

        }
 

        
void Page_Loaded(object sender, RoutedEventArgs e)
        
{
            
string xaml = string.Empty;
            xaml 
= "<TextBlock xmlns=\"http://schemas.microsoft.com/client/2007\" Margin=\"14,11,19,12\" Name=\"textBlock1\" FontFamily=\"Time New Roman\" FontSize=\"40\">00:00:00</TextBlock>";
            textBlock1 = XamlReader.Load(xaml) as TextBlock;

           
//Loaded就是TextBlock的加载事件,那么里面的textBlock1_Loaded自然就是事件处理程序的名称。
            textBlock1.Loaded += new RoutedEventHandler(textBlock1_Loaded);

           
//改变附加属性(attached properties),必须使用SetValue方法
            textBlock1.SetValue(Canvas.LeftProperty, 2);
            textBlock1.SetValue(Canvas.TopProperty, 
2);

            
//加把textBlock1对象做为子对象添加到画布(和asp.net页的控件树的道理相拟)

            
this.EClock.Children.Add(textBlock1);

        }
 

        
void textBlock1_Loaded(object sender, RoutedEventArgs e)
        
{

            
//使用了DispatcherTimer,我把间隔设置为1秒。该计时器的间隔事件也是Tick事件
            timer = new System.Windows.Threading.DispatcherTimer();
            timer.Interval 
= new TimeSpan(001);   //间隔1秒
            timer.Tick += new EventHandler(timer_Tick);
            timer.Start();
        }
 

        
void timer_Tick(object sender, EventArgs e)
        
{
            textBlock1.Text 
= DateTime.Now.ToLongTimeString();
        }

    }

}

运行的结果如下:
 
一个简单的电子钟做好了。主要是学习两项内容:通过XamlReader类的Load方法,动态创建UI元素和DispatcherTimer。





本文转自 张善友 51CTO博客,原文链接:http://blog.51cto.com/shanyou/73546,如需转载请自行联系原作者
目录
相关文章
|
3月前
|
前端开发 开发工具 git
|
5月前
|
开发工具 Android开发 开发者
Android `.9.png` 图像是用于UI的可拉伸格式,保持元素清晰度和比例
【6月更文挑战第26天】Android `.9.png` 图像是用于UI的可拉伸格式,保持元素清晰度和比例。通过边上的黑线定义拉伸区域,右下角黑点标识内容区域,适应文本或组件大小变化。常用于按钮、背景等,确保跨屏幕尺寸显示质量。Android SDK 提供`draw9patch.bat`工具来创建和编辑。**
254 6
|
4月前
Element UI 表单【详解】-- 表单校验,表单元素排列在一行,常用表单元素等
Element UI 表单【详解】-- 表单校验,表单元素排列在一行,常用表单元素等
168 0
element-ui框架的el-dialog弹出框被遮罩层挡住了/el-drawer....会生成v-model元素的组件被遮罩层挡住
element-ui框架的el-dialog弹出框被遮罩层挡住了/el-drawer....会生成v-model元素的组件被遮罩层挡住
414 1
|
前端开发 JavaScript 中间件
关于浮动元素,你还在自己计算位置吗?来看看 Floating UI 吧!
关于浮动元素,你还在自己计算位置吗?来看看 Floating UI 吧!
287 0
|
开发工具 Android开发 iOS开发
如何使用 Draggable 和 DragTarget 在 Flutter 中创建拖放 UI 元素?
如何使用 Draggable 和 DragTarget 在 Flutter 中创建拖放 UI 元素?
492 0
|
数据安全/隐私保护 索引
element-ui库的表单元素的总结
element-ui库的表单元素的总结
294 0
|
C#
WPF 中使用附加属性,将任意 UI 元素或控件裁剪成圆形(椭圆)
原文:WPF 中使用附加属性,将任意 UI 元素或控件裁剪成圆形(椭圆) 版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:http://blog.csdn.net/wpwalter/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
1261 0
|
C#
在WPF中减少逻辑与UI元素的耦合
原文:在WPF中减少逻辑与UI元素的耦合              在WPF中减少逻辑与UI元素的耦合 周银辉 1,    避免在逻辑中引用界面元素,别把后台数据强加给UI  一个糟糕的案例 比如说主界面上有一个显示当前任务状态的标签label_TaskState,我们会时常更新该标签以便及时地将任务状态通知用户。
1046 0
|
Web App开发
25套用于 Web UI 设计的免费 PSD 网页元素模板
  Web 元素是任何网站相关项目都需要的,质量和良好设计的元素对于设计师来说就像宝贝一样。如果您正在为您的网站,博客,Web 应用程序或移动应用程序寻找完美设计的网页元素,那么下面这个列表会是你需要的。
979 0