3

我正在尝试在 wpf 中构建一个动态的 uniformgrid,它将根据控件的宽度更改列数。所以本质上,如果应用程序是全屏的,那么显示 7 列,如果应用程序被调整为小宽度,那么只有 1 列必须显示。我想适应那些非常宽的屏幕尺寸,如果用户想把应用程序塞到屏幕的一侧。

我正在显示数据的卡片视图,在本例中是一些带有肖像图像的通用员工数据。

我对如何解决这个问题的最初想法是将 uniformgrid 的 width 属性链接到 viewmodel 并将列数绑定到另一个属性,其中 get 将是一个计算列数的函数。但这不起作用,因为绑定不适用于 size 属性,即使在 OneWayToSource 模式下也是如此。

到目前为止,我找到的解决方案是创建一个自定义 UniformGrid 类并覆盖 MeasuerOverride 方法。它的工作原理是每次更改屏幕尺寸时都会运行,这会使应用程序变慢。并且当您最大化屏幕或将其固定到屏幕的一侧时,它不会被触发。

public class EmployeeUniformGrid : UniformGrid
    protected override Size MeasureOverride(Size constraint)
    {
        Size size = base.MeasureOverride(constraint);
        if (size.Width > 1200) this.Columns = 7;
        if (size.Width > 400) this.Columns = 2;
        return size;
    }
}

所以这里真正的问题是,这种功能是如何使用 MVVM 实现的(如果可能的话),并以一种不会降低应用程序速度的方式实现?

4

0 回答 0