【发布时间】:2017-08-31 02:28:20
【问题描述】:
我目前正在尝试在 WPF 中填充 UniformGrid。
一些背景:我正在尝试构建一个 2D Sidescroller(我知道,WPF 不是最好的解决方案,我应该使用 Unity 或其他东西。不过我想尝试一下)。现在,对于地图,我正在考虑使用 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 子项的可能性? 普通的网格会做得更好吗?我想避免这种情况,因为 UniformGrid 子项会按照我需要的方式自动排列和调整大小,无需任何努力。
【问题讨论】:
-
这对于使用数据绑定的 MVVM 模式来说会容易得多。使用绑定到
ObservableCollection的ItemsControl,并以UniformGrid作为其容器。只需从集合中添加/编辑/删除项目,UI 就会自动调整。 -
我担心我真的对 MVVM 模式一无所知,但我想我应该读一读,因为这听起来是处理这个问题的好方法。感谢您的提示!