c#:如何在同一网格中设置特定行的不透明度

时间:2014-06-11 08:37:01

标签: c# .net silverlight checkbox grid

我是Silverlight c#devloper,我处于以下快照解释的情况:

enter image description here

正如你所看到我有一个网格(必须使用c#进行prgramtically创建,只有给我选项)。

并且该网格的第一行(始终可见)我有复选框,在检查时将第二个完整行的不透明度设置为0.3,并且在取消选中时将第3个完整行的不透明度设置为0.3(所有三个列)。

我尝试这样做(可能是错误的):(因为它会创建整个childGrid的不透明度,而不仅仅是行,但我想在检查和取消选中checkBox时按行进行不透明度)

Grid childGrid = new Grid();
childGrid.ColumnDefinitions.Add(new ColumnDefinition());
childGrid.ColumnDefinitions.Add(new ColumnDefinition());
childGrid.ColumnDefinitions.Add(new ColumnDefinition());
for (int i = 0; i < totalRows; i++) 
{
    childGrid.RowDefinitions.Add(new RowDefinition() {
        Height = GridLength.Auto
    });
}
CheckBox chb = new CheckBox();
chb.Checked += (o, e) => 
  {
    txtblkShowStatus.Text = param.Parameter[index].Component.Attributes.Showstatus;
    TextBlock txt = new TextBlock();
    txt.Text = "Hello from second row";
    Grid.SetColumn(txt, 1);
    Grid.SetRow(txt, 1);
    // childGrid.Opacity = 0.3;
    childGrid.Children.Add(txt);
};
chb.Unchecked += (o, e) => 
    {
    txtblkShowStatus.Text = "No";
    TextBlock txt = new TextBlock();
    txt.Text = "Hello from third row";
    Grid.SetColumn(txt, 1);
    Grid.SetRow(txt, 2);
    // childGrid.Opacity = 0.3;
    childGrid.Children.Add(txt);
};

Grid.SetColumn(txtblkShowStatus, 2);
Grid.SetRow(txtblkShowStatus, 0);
childGrid.Children.Add(txtblkShowStatus);

如何实现它?任何代码或逻辑的帮助表示赞赏。 或者你可以解释一下,如果你有相同的逻辑来实现相同的

2 个答案:

答案 0 :(得分:1)

你在创建你的txt孩子的时候(感觉就像80年代的那样!)你可以,而不是创建它们并将它们分配到网格行/列,在他们自己的网格中创建它们跨越父母网格并具有相同的列。然后,您可以更改该行网格的不透明度。

唯一的问题是保持每个行网格列的宽度相同会花费更多的工作,但可以通过将这些列宽度绑定到父网格列宽度的实际宽度来实现。

答案 1 :(得分:1)

    Grid childGrid = new Grid();

    Grid Grdrow1 = new Grid();
    Grid Grdrow2 = new Grid();            

    childGrid.ColumnDefinitions.Add(new ColumnDefinition());
    childGrid.ColumnDefinitions.Add(new ColumnDefinition());
    childGrid.ColumnDefinitions.Add(new ColumnDefinition());
    for (int i = 0; i < 3; i++)
    {
        childGrid.RowDefinitions.Add(new RowDefinition()
        {
            Height = GridLength.Auto
        });
    }
    CheckBox chb = new CheckBox();
    chb.Content = "Checkbox";
    chb.Checked += (o, e) =>
    {
        TextBlock txt = new TextBlock();
        txt.Text = "Hello from second row";
        Grid.SetColumn(Grdrow1, 1);
        Grid.SetRow(Grdrow1, 1);
        Grdrow1.Children.Add(txt);


        Grdrow2.Opacity = 0;
        Grdrow1.Opacity = 1;


        childGrid.Children.Add(Grdrow1);
    };
    chb.Unchecked += (o, e) =>
    {
        TextBlock txt = new TextBlock();
        txt.Text = "Hello from third row";
        Grid.SetColumn(Grdrow2, 1);
        Grid.SetRow(Grdrow2, 2);
        Grdrow2.Children.Add(txt);


        Grdrow2.Opacity = 1;
        Grdrow1.Opacity = 0;


        childGrid.Children.Add(Grdrow2);
    };

    childGrid.Children.Add(chb);
    LayoutRoot.Children.Add(childGrid);

这是一个例子。 在这里,我为每两行创建两个新网格,并将相关文本框添加到每一行。然后,网格将添加到子网格中。

然后用户选中复选框,第二行网格将被隐藏,另一个可见,然后取消选中并执行相反的操作。您可以更改不透明度参数。