Aprende el control Grid con una cuadrícula de 3×3

Aprende el control Grid con una cuadrícula de 3×3

Los desarrolladores que hayan trabajado con WPF conocerán bien el control Grid; su comportamiento en WinUI es prácticamente idéntico al de WPF. En esta lección crearemos una cuadrícula de botones numéricos 3×3 usando Grid. Todos los botones comparten el mismo manejador de evento click. Al pulsar un botón, recuperaremos su valor Tag y lo imprimiremos en la consola de depuración a modo de demostración. En proyectos reales, puedes usar la propiedad Tag para identificar qué botón se ha pulsado y ejecutar la lógica correspondiente.

Resultado final

Crea un proyecto nuevo y reemplaza el Grid raíz por este código:

<Grid Padding="40">
    <!-- Cuadrícula 3x3: 3 filas, 3 columnas -->
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="Auto"/>
        <ColumnDefinition Width="Auto"/>
    </Grid.ColumnDefinitions>

    <!-- Fila 1 -->
    <Button Grid.Row="0" Grid.Column="0" Content="1" Tag="Tag_1" Click="OnGridButtonClick" Width="120" Height="80" Margin="8" FontSize="18"/>
    <Button Grid.Row="0" Grid.Column="1" Content="2" Tag="Tag_2" Click="OnGridButtonClick" Width="120" Height="80" Margin="8" FontSize="18"/>
    <Button Grid.Row="0" Grid.Column="2" Content="3" Tag="Tag_3" Click="OnGridButtonClick" Width="120" Height="80" Margin="8" FontSize="18"/>

    <!-- Fila 2 -->
    <Button Grid.Row="1" Grid.Column="0" Content="4" Tag="Tag_4" Click="OnGridButtonClick" Width="120" Height="80" Margin="8" FontSize="18"/>
    <Button Grid.Row="1" Grid.Column="1" Content="5" Tag="Tag_5" Click="OnGridButtonClick" Width="120" Height="80" Margin="8" FontSize="18"/>
    <Button Grid.Row="1" Grid.Column="2" Content="6" Tag="Tag_6" Click="OnGridButtonClick" Width="120" Height="80" Margin="8" FontSize="18"/>

    <!-- Fila 3 -->
    <Button Grid.Row="2" Grid.Column="0" Content="7" Tag="Tag_7" Click="OnGridButtonClick" Width="120" Height="80" Margin="8" FontSize="18"/>
    <Button Grid.Row="2" Grid.Column="1" Content="8" Tag="Tag_8" Click="OnGridButtonClick" Width="120" Height="80" Margin="8" FontSize="18"/>
    <Button Grid.Row="2" Grid.Column="2" Content="9" Tag="Tag_9" Click="OnGridButtonClick" Width="120" Height="80" Margin="8" FontSize="18"/>
</Grid>Lenguaje del código: HTML, XML (xml)

Grid es un panel de disposición. Se definen filas y columnas mediante RowDefinitions y ColumnDefinitions. Cada control hijo usa las propiedades adjuntas Grid.Row y Grid.Column para indicar su celda. Este ejemplo es una cuadrícula 3×3: la celda superior izquierda es fila 0, columna 0 (los índices empiezan en 0, no en 1), la celda inferior derecha es fila 2, columna 2.

Todos los botones enlazan a la misma función de evento con Click=»OnGridButtonClick». Coloca el cursor sobre el nombre del evento en XAML y pulsa F12 para que Visual Studio genere automáticamente el esqueleto de la función.

Dentro de la función C++ generada, convierte el parámetro sender a Button para acceder a su propiedad Tag y saber qué botón se ha pulsado.

    Button targetButton = sender.as<Button>();
    if (!targetButton) return;

    // Obtener cadena Tag personalizada
    hstring buttonTag = unbox_value<hstring>(targetButton.Tag());

    OutputDebugStringW(buttonTag.c_str());
    OutputDebugStringW(L"\n");
Lenguaje del código: C++ (cpp)

Recuerda añadir los espacios de nombres necesarios al principio del archivo .cpp para reconocer los tipos de controles. Código completo a continuación:

#include "pch.h"
#include "MainWindow.xaml.h"
#if __has_include("MainWindow.g.cpp")
#include "MainWindow.g.cpp"
#endif

#include <winrt/Microsoft.UI.Xaml.Controls.h>
#include <winrt/Microsoft.UI.Xaml.h>

using namespace winrt;
using namespace Microsoft::UI::Xaml;
using namespace Microsoft::UI::Xaml::Controls;
using namespace Windows::Foundation;

// Más información sobre WinUI: http://aka.ms/winui-project-info.

namespace winrt::AppWinui::implementation
{
    int32_t MainWindow::MyProperty()
    {
        throw hresult_not_implemented();
    }

    void MainWindow::MyProperty(int32_t /* value */)
    {
        throw hresult_not_implemented();
    }
}

void winrt::AppWinui::implementation::MainWindow::OnGridButtonClick(
winrt::Windows::Foundation::IInspectable const& sender, winrt::Microsoft::UI::Xaml::RoutedEventArgs const& e)
{
    Button targetButton = sender.as<Button>();
    if (!targetButton) return;

    // Obtener cadena Tag personalizada
    hstring buttonTag = unbox_value<hstring>(targetButton.Tag());

    OutputDebugStringW(buttonTag.c_str());
	OutputDebugStringW(L"\n");
}
Lenguaje del código: C++ (cpp)

OutputDebugStringW es una API nativa de Windows para imprimir texto en la ventana de salida de depuración de Visual Studio, muy útil para registrar información en tiempo de ejecución.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *