使用代码访问带有变量的 gridview 列

Access gridview column with variable using code

我正在尝试制作一个涉及使用包含网格视图的列表视图的 WPF 程序。 如果更改 window 大小,我编写了一些代码来缩放 UI 中的所有元素,以便我的软件与所有屏幕尺寸兼容。

我遇到的问题是,当我缩放 window 时,所有项目都很好地缩放,但列表视图的列根本不缩放。所以我尝试通过与我用来缩放其余部分的因素相同的因素来改变列的宽度。但是我不知道如何访问 gridview 的这个变量。

有谁知道如何更改列的宽度? 此代码用于缩放 window:

中的所有内容
        // size mainmenu elements correctly
    private void MainWindow1_SizeChanged(object sender, SizeChangedEventArgs e)
    {
        foreach (UIElement element in MainGrid.Children)
        {
            if (element.GetType() == typeof(Canvas))
            {
                Canvas canvas = (Canvas)element;
                if(canvas.Name != "canvasCategories")
                {
                    canvas.Width = e.NewSize.Width;
                    canvas.Height = e.NewSize.Height;
                }

                double xChange = 1, yChange = 1;

                if (e.PreviousSize.Width != 0)
                    xChange = (e.NewSize.Width / e.PreviousSize.Width);

                if (e.PreviousSize.Height != 0)
                    yChange = (e.NewSize.Height / e.PreviousSize.Height);

                foreach (FrameworkElement fe in canvas.Children)
                {
                    if (fe is Grid == false)
                    {
                        fe.Height = fe.ActualHeight * yChange;
                        fe.Width = fe.ActualWidth * xChange;

                        Canvas.SetTop(fe, Canvas.GetTop(fe) * yChange);
                        Canvas.SetLeft(fe, Canvas.GetLeft(fe) * xChange);
                    }
                }


                foreach (UIElement elem in canvas.Children)
                {
                    // TODO Scale list colums correctly
                    if (elem.GetType() == typeof(ListView))
                    {
                        ListView list = (ListView)elem;
                        foreach (ListViewItem lvitem in list.Items)
                        {

                        }
                    }
                }
            }
        }
    }

前面代码的这一部分是应该缩放列的部分:

foreach (UIElement elem in canvas.Children)
                {
                    // TODO Scale list colums correctly
                    if (elem.GetType() == typeof(ListView))
                    {
                        ListView list = (ListView)elem;
                        foreach (ListViewItem lvitem in list.Items)
                        {

                        }
                    }
                }

如您所见,我有 foreach 循环获取 canvas 中的所有列表视图,但我不知道如何继续..

提前致谢!

您可以通过转换 ListView:

View 属性 来获得对 GridView 的引用
ListView list = (ListView)elem;
GridView gridView = list.View as GridView;
if (gridView != null)
{
    foreach (GridViewColumn column in gridView.Columns)
    {
        //...
    }
}