WPF网格问题 - 以编程方式设置一个

时间:2014-08-14 14:21:45

标签: c# wpf

我想显示一个图像网格。最初网格将是空的,然后当图像从外部设备到达时它将逐渐填充,可能是随机顺序,即,我可以获得位置(1,3)然后(5,5)等的图像。

尺寸将在运行时知道,但在我显示网格之前,所以我必须以编程方式设置它们,而不是在XAML中。

1。我在网上找到的示例显示了如何在XAML中定义网格行和列,但是如何在C#中以编程方式执行,即,如果指定了5x4网格我希望用户最初看到一个空的5x4网格。

2. 如何以编程方式访问/更改各个网格位置的元素?当网格为空时,我想首先在每个空白点(如“X”或彩色矩形)中显示某些内容,然后在实际图像到达时将其替换。在C#中,如何访问网格位置(x,y)以添加或更改其中的内容?

3 网格是否具有任何内在的滚动功能,或者我必须将它们包装在单独的滚动控件中,即

<ScrollViewer>
    <Grid>
    </Grid> 
</ScrollViewer>

...如果我这样做,我可以将其设置为滚动条,只有在需要时才会显示?

1 个答案:

答案 0 :(得分:2)

  1. 很简单,请参阅msdn

        // Create the Grid
        Grid myGrid = new Grid();
        myGrid.Width = 250;
        myGrid.Height = 100;
        myGrid.HorizontalAlignment = HorizontalAlignment.Left;
        myGrid.VerticalAlignment = VerticalAlignment.Top;
        myGrid.ShowGridLines = true;
    
        // Define the Columns
        ColumnDefinition colDef1 = new ColumnDefinition();
        ColumnDefinition colDef2 = new ColumnDefinition();
        ColumnDefinition colDef3 = new ColumnDefinition();
        myGrid.ColumnDefinitions.Add(colDef1);
        myGrid.ColumnDefinitions.Add(colDef2);
        myGrid.ColumnDefinitions.Add(colDef3);
    
        // Define the Rows
        RowDefinition rowDef1 = new RowDefinition();
        RowDefinition rowDef2 = new RowDefinition();
        RowDefinition rowDef3 = new RowDefinition();
        RowDefinition rowDef4 = new RowDefinition();
        myGrid.RowDefinitions.Add(rowDef1);
        myGrid.RowDefinitions.Add(rowDef2);
        myGrid.RowDefinitions.Add(rowDef3);
        myGrid.RowDefinitions.Add(rowDef4);
    
        // Add the first text cell to the Grid
        TextBlock txt1 = new TextBlock();
        txt1.Text = "2005 Products Shipped";
        txt1.FontSize = 20; 
        txt1.FontWeight = FontWeights.Bold;
        Grid.SetColumnSpan(txt1, 3);
        Grid.SetRow(txt1, 0);
    
        ...
        myGrid.Children.Add(txt1);
        mainWindow.Content = myGrid
    
  2. Set网格位置,get它(越来越复杂)

  3. 我可能会在您的案例中使用ListBox WrapPanel。您将获得选择(多项选择?)和滚动作为奖励。搜索“wpf listbox wrappanel”,例如,here就是其中之一。