更新:2007 年 11 月
WPF 動畫引擎提供許多功能,可以用來建立畫面格架構的動畫。不過,在某些應用程式案例中,您需要針對每一個畫面格進行更精細的呈現控制。CompositionTarget 物件提供了依據單格回呼 (Callback) 建立自訂動畫的功能。
CompositionTarget 是一種靜態類別,代表用來繪製應用程式的顯示介面。每次繪製應用程式的場景時,都會引發 Rendering 事件。呈現畫面播放速率就是每秒繪製場景的次數。
注意事項: |
|---|
如需使用 CompositionTarget 的完整程式碼範例,請參閱使用 CompositionTarget 範例。 |
範例
WPF 呈現處理過程中會引發 Rendering 事件。下列範例顯示如何將 EventHandler 委派註冊到 CompositionTarget 上的靜態 Rendering 方法。
// Add an event handler to update canvas background color just before it is rendered.
CompositionTarget.Rendering += UpdateColor;
您可以使用自己的呈現事件處理常式 (Event Handler) 方法來建立自訂繪製內容。每個畫面格都會呼叫此事件處理常式方法一次。每次 WPF 將視覺化樹狀結構中保留的呈現資料封送處理至複合場景圖形時,就會呼叫事件處理常式方法。此外,如果視覺化樹狀結構的變更強制更新複合場景圖形,也會呼叫事件處理常式方法。請注意,事件處理常式方法是在配置計算完成之後呼叫。不過,您可以在事件處理常式方法中修改配置,而這代表配置會在呈現之前再計算一次。
下列範例說明如何在 CompositionTarget 事件處理常式方法中提供自訂繪圖。這個案例使用以滑鼠座標位置為準的色彩值來繪製 Canvas 的背景色彩。如果您將滑鼠移到 Canvas 內,它的背景色彩就會改變。此外,這個範例也會根據目前已耗用的時間和呈現的畫面格總數,計算平均畫面播放速率。
// Called just before frame is rendered to allow custom drawing.
protected void UpdateColor(object sender, EventArgs e)
{
if (_frameCounter++ == 0)
{
// Starting timing.
_stopwatch.Start();
}
// Determine frame rate in fps (frames per second).
long frameRate = (long)(_frameCounter / this._stopwatch.Elapsed.TotalSeconds);
if (frameRate > 0)
{
// Update elapsed time, number of frames, and frame rate.
myStopwatchLabel.Content = _stopwatch.Elapsed.ToString();
myFrameCounterLabel.Content = _frameCounter.ToString();
myFrameRateLabel.Content = frameRate.ToString();
}
// Update the background of the canvas by converting MouseMove info to RGB info.
byte redColor = (byte)(_pt.X / 3.0);
byte blueColor = (byte)(_pt.Y / 2.0);
myCanvas.Background = new SolidColorBrush(Color.FromRgb(redColor, 0x0, blueColor));
}
您可能會發現自己的自訂繪圖在不同電腦上的執行速度也不同。這是因為您的自訂繪圖受到畫面播放速率的限制。依據您所執行的系統和系統的工作負載而定,每秒呼叫 Rendering 事件的次數可能各不相同。如需判斷執行 WPF 之裝置的圖形硬體功能和效能的詳細資訊,請參閱圖形轉譯層。
在引發事件時加入或移除呈現 EventHandler 委派的作業將會延後到事件引發完成之後。這與在 Common Language Runtime (CLR) 中處理 MulticastDelegate 架構事件的方式一致。另外請注意,呈現事件不一定會以任何特定的順序呼叫。如果您有多項必須遵照特定順序的 EventHandler 委派,應該註冊單一 Rendering 事件,然後再自行按照正確的順序多工處理這些委派。
使用 Perforator 分析呈現行為
Perforator 是用來分析呈現行為的 WPF 效能分析工具。Perforator 會顯示一組值,供您用來分析應用程式某些部分的特定呈現行為。在這個案例中,Perforator 顯示的 PhotoDemo 範例應用程式呈現畫面播放速度是每秒 60 個畫面格。
Perforator 主視窗
.png)
如需詳細資訊,請參閱 WPF 的效能分析工具。
請參閱
概念
Windows Presentation Foundation 圖形轉譯概觀
注意事項: