2016-05-19 48 views

回答

3

Win2D是立即模式的圖形庫(維基百科)

立即模式渲染爲圖形庫應用程序編程接口,其中客戶端調用直接引起圖形渲染對象到所述顯示器的樣式。它並不排除使用雙緩衝。與保留模式相比,要呈現的對象列表不會被API庫保存。相反,應用程序必須重新發布每次需要新幀時描述整個場景所需的所有繪圖命令,無論實際更改如何。該方法爲應用程序提供了最大程度的控制和靈活性。

所以,你要保留你想要修改的對象的引用,因爲一旦它被繪製,它就會丟失。


因此,將您的CanvasBitmap定義爲全局資源或創建某種類型的ResourceLocator。然後創建一個你自己的類,它存儲x,y,寬度,高度就像一個自定義對象;

public class GenericItem 
{ 
    public CanvasBitmap b; 
    public int x; 
    public int y; 
    public int w; 
    public int h; 
} 
從Win2D

變形例:

CanvasBitmap cat, mouse; 
GenericItem gi_cat; 

加載位圖中:

async Task CreateResourcesAsync(CanvasControl sender) 
{ 
    cat = await CanvasBitmap.LoadAsync(sender, "ShawnsCat.jpg"); 
    mouse = await CanvasBitmap.LoadAsync(sender, "Mouse.png"); 

    // create your GenericItem here 
    gi_cat = new GenericItem(); 
    // fill in your x,y,width,height,bitmap 
} 

現在繪製

void myWidget_Draw(CanvasControl sender, CanvasDrawEventArgs args) 
{ 
    args.DrawingSession.DrawImage(gi_cat.b, gi_cat.x, gi_cat.y); 
} 

現在您可以修改gi_cat.x gi_cat.y和您添加的任何屬性。

gi_cat.x = 500; 
gi_cat.y = 250; 

並且您可以在畫布控件上導致重繪調用Invalidate方法。

name_of_your_canvas.Invalidate(); 

這將導致畫布控件重新繪製新的位置。


基本上,你必須自己處理所有事情。如果您正在尋找一種類似DOM的方法,那麼只需使用XAML中的常規控件Canvas即可。


我有一個很深入Win2D演練在這裏:

Win2D Getting Started: Windows Universal Application