Доброго времени суток.
У меня есть Grid 5x5 в каждой ячейке которого находятся кнопки. Нужно чтобы при нажатии на кнопку менялся его цвет.
Сейчас делаю так:
XAML
<Grid Name="field" Tag="gameField" Margin="6,60,386,0" Height="400" VerticalAlignment="Top">
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button x:Name="button00" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="0" Grid.Column="0" Click="button_Click"/>
<Button x:Name="button01" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="0" Grid.Column="1" Click="button_Click"/>
<Button x:Name="button02" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="0" Grid.Column="2" Click="button_Click"/>
<Button x:Name="button03" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="0" Grid.Column="3" Click="button_Click"/>
<Button x:Name="button04" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="0" Grid.Column="4" Click="button_Click"/>
<Button x:Name="button10" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="1" Grid.Column="0" Click="button_Click"/>
<Button x:Name="button11" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="1" Grid.Column="1" Click="button_Click"/>
<Button x:Name="button12" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="1" Grid.Column="2" Click="button_Click"/>
<Button x:Name="button13" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="1" Grid.Column="3" Click="button_Click"/>
<Button x:Name="button14" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="1" Grid.Column="4" Click="button_Click"/>
<Button x:Name="button20" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="2" Grid.Column="0" Click="button_Click"/>
<Button x:Name="button21" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="2" Grid.Column="1" Click="button_Click"/>
<Button x:Name="button22" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="2" Grid.Column="2" Click="button_Click"/>
<Button x:Name="button23" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="2" Grid.Column="3" Click="button_Click"/>
<Button x:Name="button24" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="2" Grid.Column="4" Click="button_Click"/>
<Button x:Name="button30" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="3" Grid.Column="0" Click="button_Click"/>
<Button x:Name="button31" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="3" Grid.Column="1" Click="button_Click"/>
<Button x:Name="button32" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="3" Grid.Column="2" Click="button_Click"/>
<Button x:Name="button33" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="3" Grid.Column="3" Click="button_Click"/>
<Button x:Name="button34" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="3" Grid.Column="4" Click="button_Click"/>
<Button x:Name="button40" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="4" Grid.Column="0" Click="button_Click"/>
<Button x:Name="button41" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="4" Grid.Column="1" Click="button_Click"/>
<Button x:Name="button42" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="4" Grid.Column="2" Click="button_Click"/>
<Button x:Name="button43" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="4" Grid.Column="3" Click="button_Click"/>
<Button x:Name="button44" Content="" HorizontalAlignment="Left" VerticalAlignment="Top" Width="80" Height="80" Grid.Row="4" Grid.Column="4" Click="button_Click"/>
</Grid>
C#
private void button_Click(Object sender, RoutedEventArgs e)
{
Button[,] Field = new Button[5, 5] { {button00, button01, button02, button03, button04},
{button10, button11, button12, button13, button14},
{button20, button21, button22, button23, button24},
{button30, button31, button32, button33, button34},
{button40, button41, button42, button43, button44}
};
for (int i = 0; i < 5; i++)
{
for (int j = 0; j < 5; j++)
{
if (Field[i, j] == sender)
{
Field[i, j].Background = Brushes.Red;
}
}
}
}
Хотелось бы узнать, можно ли как-то записывать кнопки в подобный массив(возможно даже больших размеров) не зная имён кнопок, ибо при большом количестве кнопок прописывать всё в ручную будет не очень удобно.
Спасибо за внимание.
(sender as Button).Background = .....;? – tym32167 Jun 20 '18 at 07:44UniformGrid, создавать кнопки динамически можно как из вопроса дубликата используяItemsControl+ цикл, вешать наUniformGridобработчикPreviewMouseLeftButtonUpи через свойствоChildrenуUniformGridвыбирать кнопки, через количествоRowsиColumnsвычислять их позицию в двумерном массиве. В таком случае вы избавитесь от повторения кода. – Alex Krass Jun 20 '18 at 09:13CommandParameter = "{Binding}"). Только по правилам MVVM вы не должны думать о кнопке, как о контроле. Думайте о VM данной кнопки, которая содержит необходимые свойства (которые привязаны к кнопке), а не о самой кнопке. Если хотите задать цвет и вы сделали все по тому ответу, то вButtonViewModelдобавьте новое свойство содержащее цвет, и его привяжите. – EvgeniyZ Jun 20 '18 at 18:52Command="{Binding Command}" CommandParameter="{Binding}" Background="{Binding Color}"". – EvgeniyZ Jun 20 '18 at 19:24