WPF - необходимо получить доступ к элементу прямоугольника в ItemsControl в коде - PullRequest
0 голосов
/ 09 июня 2018

Я делаю простую игру, игру в кирпич / блокбрейкер.У меня есть рисование блоков на экране, где они мне нужны правильно.Тем не менее, я хочу найти способ использовать пользовательский делегат и пользовательское событие для обнаружения столкновения между одним прямоугольником (шаром) и другим прямоугольником (блоком) с помощью метода Rectangle.IntersectsWith ().Я хочу, чтобы затронутый блок сообщил об этом событии, поэтому я могу заставить его исчезнуть.

Для генерации своих блоков я использую набор кода WPF XAML, который создает элемент ItemsControl в Canvas (игровой доске), который содержитПрямоугольник.В своем коде я связываю ItemsControl ItemsSource со списком универсального типа Block класса.Этот класс Block очень прост, он просто содержит логическое значение.Если блок имеет значение true, связанный блок заставит триггер ItemsControl включить прямоугольник.

Мяч - это элемент Rectangle в WPF, определенный в Canvas.Итак, я могу предоставить любой код, необходимый здесь, но для начала я опубликовал то, что, по моему мнению, было уместно, чтобы донести идею до начала ...

Любые советы, предложения или идеи для достижения этой цели?

C #: MainWindow.xaml.cs

private void BindBlocks()
{
    Blocks = new List<Block>();
    for (var c = 0; c < 8; c++)
    {
        for (var r = 0; r < 4; r++)
        {
            Blocks.Add(new Block(true));
        }
    }
    ItemsControl_BlockBinding.ItemsSource = Blocks;
}

WPF: MainWindow.xaml

<!--BLOCKS-->
<ItemsControl x:Name="ItemsControl_BlockBinding" Canvas.Top="16" Canvas.Left="17">
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <UniformGrid x:Name="Grid_BlockField" Height="370" Width="730" Columns="8" ClipToBounds="True">
                <UniformGrid.Effect>
                    <DropShadowEffect Direction="270" Opacity="0.8" ShadowDepth="1" BlurRadius="8"/>
                </UniformGrid.Effect>
            </UniformGrid>
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Rectangle x:Name="Rectangle_Block" IsEnabled="{Binding (local:Block.BlockState)}" Fill="AliceBlue" Height="auto" Width="auto" Margin="3,3,3,3"/>
            <DataTemplate.Triggers>
                <Trigger Property="IsEnabled" Value="True">
                    <Setter Property="Visibility" Value="Visible" TargetName="Rectangle_Block"/>
                </Trigger>
                <Trigger Property="IsEnabled" Value="False">
                    <Setter Property="Visibility" Value="Hidden" TargetName="Rectangle_Block"/>
                </Trigger>
            </DataTemplate.Triggers>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
...