【问题标题】:Change UniformGrid child item during runtime在运行时更改 UniformGrid 子项
【发布时间】: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 模式来说会容易得多。使用绑定到ObservableCollectionItemsControl,并以UniformGrid 作为其容器。只需从集合中添加/编辑/删除项目,UI 就会自动调整。
  • 我担心我真的对 MVVM 模式一无所知,但我想我应该读一读,因为这听起来是处理这个问题的好方法。感谢您的提示!

标签: c# wpf


【解决方案1】:

不要用新的Image 替换Image,而是更改现有图像的来源。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    相关资源
    最近更新 更多