c#:如何设置同一网格中特定行的不透明度
我是silverlight c#devloper,我的处境如下所示: 正如您所见,我有一个网格(必须使用c#来创建,这是我唯一的选择) 网格的第一行(总是可见的)我有一个复选框,选中它会将第二整行的不透明度设置为0.3,取消选中它会将第三整行的不透明度设置为0.3(所有三列) 我这样做的尝试(可能是错误的):(因为它将创建整个childGrid的不透明度,不仅仅是行,而且我希望在复选框的选中和取消选中时按行显示不透明度)c#:如何设置同一网格中特定行的不透明度,c#,.net,silverlight,checkbox,grid,C#,.net,Silverlight,Checkbox,Grid,我是silverlight c#devloper,我的处境如下所示: 正如您所见,我有一个网格(必须使用c#来创建,这是我唯一的选择) 网格的第一行(总是可见的)我有一个复选框,选中它会将第二整行的不透明度设置为0.3,取消选中它会将第三整行的不透明度设置为0.3(所有三列) 我这样做的尝试(可能是错误的):(因为它将创建整个childGrid的不透明度,不仅仅是行,而且我希望在复选框的选中和取消选中时按行显示不透明度) Grid-childGrid=new-Grid(); 添加(新的Colu
Grid-childGrid=new-Grid();
添加(新的ColumnDefinition());
添加(新的ColumnDefinition());
添加(新的ColumnDefinition());
对于(int i=0;i
{
txtblkShowStatus.Text=param.Parameter[index].Component.Attributes.Showstatus;
TextBlock txt=新的TextBlock();
txt.Text=“第二行的您好”;
Grid.SetColumn(txt,1);
Grid.SetRow(txt,1);
//不透明度=0.3;
childGrid.Children.Add(txt);
};
chb.未选中+=(o,e)=>
{
txtblkShowStatus.Text=“否”;
TextBlock txt=新的TextBlock();
txt.Text=“第三行的您好”;
Grid.SetColumn(txt,1);
Grid.SetRow(txt,2);
//不透明度=0.3;
childGrid.Children.Add(txt);
};
Grid.SetColumn(txtblkShowStatus,2);
Grid.SetRow(txtblkShowStatus,0);
childGrid.Children.Add(txtblkShowStatus);
如何实现它有什么想法?任何需要帮助的代码或逻辑都将不胜感激或者请您解释一下,您是否有其他逻辑来实现相同的在哪里创建您的
txt
子项(感觉又像是80年代了!)您可以在自己的网格中创建它们,而不是创建它们并将它们分配给网格行/列,它们跨越父网格并具有相同的列。然后可以更改该行栅格的不透明度
唯一的问题是保持每一行网格列的宽度不变需要更多的工作,但可以通过将这些列的宽度绑定到父网格列宽度的实际宽度来实现。grid childGrid=new grid();
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);
网格Grdrow1=新网格();
Grdrow2=新网格();
添加(新的ColumnDefinition());
添加(新的ColumnDefinition());
添加(新的ColumnDefinition());
对于(int i=0;i<3;i++)
{
添加(新的行定义()
{
高度=网格长度。自动
});
}
复选框chb=新复选框();
chb.Content=“复选框”;
chb.已检查+=(o,e)=>
{
TextBlock txt=新的TextBlock();
txt.Text=“第二行的您好”;
网格设置列(Grdrow1,1);
网格设置行(Grdrow1,1);
Grdrow1.Children.Add(txt);
Grdrow2.不透明度=0;
Grdrow1.不透明度=1;
childGrid.Children.Add(Grdrow1);
};
chb.未选中+=(o,e)=>
{
TextBlock txt=新的TextBlock();
txt.Text=“第三行的您好”;
网格设置列(Grdrow2,1);
Grdrow2,2;
Grdrow2.Children.Add(txt);
Grdrow2.不透明度=1;
Grdrow1.不透明度=0;
childGrid.Children.Add(Grdrow2);
};
childGrid.Children.Add(chb);
LayoutRoot.Children.Add(childGrid);
这是一个例子。
在这里,我为每两行创建两个新网格,并将相关文本框添加到每一行。然后,网格将添加到子网格
然后用户选中复选框,第二行网格将隐藏,另一行网格可见,然后取消选中并执行相反的操作。您可以更改不透明度参数。另一个选项是使用白色(或与窗口背景匹配的任何颜色)矩形来模拟它,该矩形横跨您的列。当你想让东西不那么显眼时,你就增加了矩形的不透明度
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);