WPF控件从创建到显示
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
public class TextBoxTime : TextBox
{
public TextBoxTime()
{
//恰好在呈现组合树中的对象之前发生。
CompositionTarget.Rendering += UpdateRender;
Loaded += TB_Loaded;
}
public override void BeginInit()
{
//启动此元素的初始化过程。
base.BeginInit();
}
public override void EndInit()
{
//指示该元素的初始化过程已完成。
base.EndInit();
}
/// <summary>
/// 这事件会一直触发,根据屏幕刷新率刷新
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void UpdateRender(object sender, EventArgs e)
{
this.Text = DateTime.Now.ToString();
}
/// <summary>
/// 在应用控件模板时调用。
/// </summary>
public override void OnApplyTemplate()
{
base.OnApplyTemplate();
}
/// <summary>
/// 调整大小的文本设置为其内容。
/// </summary>
/// <param name="availableSize"></param>
/// <returns></returns>
protected override Size MeasureOverride(Size availableSize)
{
return base.MeasureOverride(availableSize);
}
/// <summary>
/// 调用以排列和调整大小的内容 System.Windows.Controls.Control 对象。
/// </summary>
/// <param name="arrangeBounds"></param>
/// <returns></returns>
protected override Size ArrangeOverride(Size arrangeBounds)
{
return base.ArrangeOverride(arrangeBounds);
}
/// <summary>
/// 在派生类中重写时,会参与由布局系统控制的呈现操作。 不直接调用此方法时,使用此元素的呈现指令,而是保留供以后异步使用布局和绘制。
/// 只是在影响布局是发生,就改变了长宽时
/// </summary>
/// <param name="drawingContext"></param>
protected override void OnRender(DrawingContext drawingContext)
{
//在这里ActualWidth和ActualHeight就已经有值了
base.OnRender(drawingContext);
this.Text = DateTime.Now.ToString();
}
private void TB_Loaded(object sender, RoutedEventArgs e)
{
}
}
一个控件从实例化到显示出来中间经过上述的这些事件,但是事件的触发是有先后顺序的,通过测试后发现顺序如下:
BeginInit | 启动此元素的初始化过程。 |
EndInit | 指示该元素的初始化过程已完成。 |
UpdateRender | 恰好在呈现组合树中的对象之前发生。 这事件会一直触发,根据屏幕刷新率刷新 |
OnApplyTemplate | 在应用控件模板时调用。 |
MeasureOverride | 调整大小的文本设置为其内容。 |
ArrangeOverride | 调用以排列和调整大小的内容Control 对象。 |
OnRender | 在派生类中重写时,会参与由布局系统控制的呈现操作。 不直接调用此方法时,使用此元素的呈现指令,而是保留供以后异步使用布局和绘制。(只是在影响布局是发生,就改变了长宽时) |
Loaded | 当对元素进行布局、呈现,且可将其用于交互时发生。 |