Я silverlight С# devloper, и я в ситуации, которая объясняется снимок ниже:
Как вы можете видеть, у меня есть сетка (нужно создать 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);
Как достичь этой идеи? Приветствуется любая часть кода или логика для помощи. Или не могли бы вы объяснить, есть ли у вас логика логики для достижения того же
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);
Вот пример. Здесь я создаю две новые сетки для каждых двух строк, а связанные текстовые поля добавляются к каждой строке. Затем после этого сетки будут добавлены в дочернюю сетку.
Затем пользователь проверяет флажок. 2-я строка сетки будет скрыта, а другая видна, затем снята и будет выполняться наоборот. Вы можете изменить параметры непрозрачности.
Если вы создаете своих детей txt
(это похоже на 80 снова!), Вы могли бы вместо их создания и назначения их в строку/столбец сетки создать их в своей сетке, которая охватывает родительскую сетку и имеет те же столбцы. Затем вы можете изменить непрозрачность этой сетки строк.
Единственный улов заключается в том, что сохранение ширины каждого столбца строки строки одинаково потребует еще большей работы, но может быть достигнуто путем привязки ширины столбцов к фактической ширине ширины столбца родительской сетки.