Silverlight: удаление содержимого определенной ячейки в сетке - PullRequest
4 голосов
/ 14 апреля 2009

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

Ответы [ 3 ]

10 голосов
/ 15 апреля 2009

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

Вот оператор LINQ, который получит первый элемент управления в столбце 3, строке 4.

var control = (from d in grid.Children
               where Grid.GetColumn(d as FrameworkElement) == 3 
                  && Grid.GetRow(d as FrameworkElement) == 4
               select d).FirstOrDefault();
1 голос
/ 14 апреля 2009

Вы можете выполнять итерации дочерних элементов сетки, проверяя их значения строк и столбцов, используя методы Grid.GetRow и Grid.GetColumn, и заменять целевой контент при совпадении значений. Вот пример, протестированный в WPF, но должен работать в Silverlight:

    <Grid x:Name="SampleGrid">
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
        <RowDefinition />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition />
        <ColumnDefinition />
        <ColumnDefinition />
    </Grid.ColumnDefinitions>
    <Rectangle Fill="Red" Width="20" Height="20" Grid.Row="0" Grid.Column="0" />
    <Rectangle Fill="Orange" Width="20" Height="20" Grid.Row="0" Grid.Column="1" />
    <Rectangle Fill="Yellow" Width="20" Height="20" Grid.Row="0" Grid.Column="2" />
    <Rectangle Fill="Green" Width="20" Height="20" Grid.Row="1" Grid.Column="0" />
    <Rectangle Fill="Blue" Width="20" Height="20" Grid.Row="1" Grid.Column="1" />
    <Rectangle Fill="Indigo" Width="20" Height="20" Grid.Row="1" Grid.Column="2" />
    <Rectangle Fill="Violet" Width="20" Height="20" Grid.Row="2" Grid.Column="0" />
    <Rectangle Fill="Black" Width="20" Height="20" Grid.Row="2" Grid.Column="1" />
    <Rectangle Fill="Gray" Width="20" Height="20" Grid.Row="2" Grid.Column="2" />
    <Button Grid.Row="3" Grid.ColumnSpan="3" Margin="10" x:Name="Swap" Click="Swap_Click" Content="Swap"/>
</Grid>

В обработчике событий:

    private void Swap_Click(object sender, RoutedEventArgs e)
    {
        Ellipse newEllipse = new Ellipse() { Fill = new SolidColorBrush(Colors.PaleGoldenrod), Width = 20d, Height = 20d };
        for (int childIndex = 0; childIndex < this.SampleGrid.Children.Count; childIndex++)
        {
            UIElement child = this.SampleGrid.Children[childIndex];
            if (Grid.GetColumn(child) == 2 && Grid.GetRow(child) == 2)
            {
                this.SampleGrid.Children.Remove(child);
                Grid.SetRow(newEllipse, 2);
                Grid.SetColumn(newEllipse, 2);
                this.SampleGrid.Children.Add(newEllipse);
            }
        }

    }
0 голосов
/ 17 августа 2010

Вы можете вспомнить de control, который я поместил в сетку, добавив приватную переменную:

private Control controlCentral = null;

Затем присвойте этой переменной элемент управления, добавляемый в сетку, чтобы можно было использовать команду «Удалить» для удаления элемента управления сетки.

Следующий код заменяет элемент управления строки 0 столбца 1:

private void MostrarControlCentral(Control control)
    {
        if (control != null)
        {
            control.SetValue(Grid.RowProperty, 0);
            control.SetValue(Grid.ColumnProperty, 1);
        }

        this.LayoutRoot.Children.Remove(this.controlCentral);
        if (control != null)
        {
            this.LayoutRoot.Children.Add(control);
        }
        this.controlCentral=control;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...