2017-08-30 41 views
0

我目前正在嘗試在WPF中填充UniformGrid。我想建立一個2D Sidescroller(我知道,WPF不是最好的解決方案,我應該使用Unity或其他東西,但我想嘗試它)。現在,我正在考慮使用UniformGrid並將孩子用作我的地圖的貼圖。在運行時更改UniformGrid子項目

到目前爲止,我使用這段代碼加我空帶孩子到UniformGrid:

private void CreateMapTiles() { 
    for (int i = 0; i < 30; i++) { 
     for (int j = 0; j < 45; j++) { 
      this.MapGrid.Children.Add(new Image()); 
     } 
    } 
} 

哪裏MapGrid是我UniformGrid。

所以,最後我想要30x45的孩子。 現在我想動態編輯CodeBehind中的那些孩子,即讓這些孩子成爲一個圖像。換句話說,我想要更新一下,比方說,索引5處的孩子可以顯示我資源中的另一張圖片,而不是以前的圖片。

我想使用這樣的事情:

this.MapGrid.Children[1] = new Image() { Source = ReturnSomeSource() }; 

但出於顯而易見的原因,這是行不通的。

有沒有什麼辦法可以在運行時爲孩子賦值? 我也玩過this.MapGrid.Children[1].SetCurrentValue(),但我也沒有真正理解我在做什麼,也沒有以任何方式工作。

是否存在這種可能性,在運行時更改UniformGrid子項? 一個正常的Grid會做得更好嗎?我想避免這種情況,因爲UniformGrid兒童的排列和尺寸會自動按照我需要的方式進行,而無需付出任何努力。

+0

使用數據綁定的MVVM模式會更容易。使用'ItemsControl'綁定到一個'UniformGrid'作爲其容器的'ObservableCollection'。只需添加/編輯/刪除集合中的項目,UI將自動調整。 –

+0

我擔心我對MVVM模式一無所知,但我想我應該給它一個閱讀,因爲它聽起來像是一個很好的方式來處理這個問題。感謝提示! – rqnn

回答

0

而不是用新的Image替換Image,請更改現有圖像上的來源。

var tileImage = this.MapGrid.Children[1] as Image; 
tileImage.Source = ReturnSomeSource(); 
+0

謝謝,這工作像一個魅力。 – rqnn