c #: Как установить непрозрачность определенной строки в той же сетке

1

Я silverlight С# devloper, и я в ситуации, которая объясняется снимок ниже:

Изображение 174551

Как вы можете видеть, у меня есть сетка (нужно создать 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
checkbox
silverlight

2 ответа

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);

Вот пример. Здесь я создаю две новые сетки для каждых двух строк, а связанные текстовые поля добавляются к каждой строке. Затем после этого сетки будут добавлены в дочернюю сетку.

Затем пользователь проверяет флажок. 2-я строка сетки будет скрыта, а другая видна, затем снята и будет выполняться наоборот. Вы можете изменить параметры непрозрачности.

1

Если вы создаете своих детей txt (это похоже на 80 снова!), Вы могли бы вместо их создания и назначения их в строку/столбец сетки создать их в своей сетке, которая охватывает родительскую сетку и имеет те же столбцы. Затем вы можете изменить непрозрачность этой сетки строк.

Единственный улов заключается в том, что сохранение ширины каждого столбца строки строки одинаково потребует еще большей работы, но может быть достигнуто путем привязки ширины столбцов к фактической ширине ширины столбца родительской сетки.

  • 0
    Другой вариант - подделать его белым (или любым другим цветом, соответствующим фону вашего окна) прямоугольником, который охватывает ваши столбцы. Когда вы хотите сделать вещи менее заметными, вы увеличиваете непрозрачность этого прямоугольника.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню