Skip to content

Commit a19f7e9

Browse files
authored
Create Win dev post 05/27
1 parent 570ed85 commit a19f7e9

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed
Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
---
2+
layout: post
3+
title: "Creando un menú contextual personalizado con WinUI 3 y XAML Islands"
4+
author: Christian Amado
5+
date: 2025-05-07 00:00:00 -0300
6+
category: [Desarrollo de software]
7+
tags: [WinDev,Windows 11,WinUI 3]
8+
thumbnail-img: /img/posts/thumbnails/win11.png
9+
cover-img: /img/posts/cover/win11.png
10+
share_img: /img/posts/shared/windows.jpg
11+
---
12+
En las aplicaciones modernas de **Windows**, los menús contextuales juegan un rol clave en mejorar la usabilidad y la productividad del usuario. En este artículo se mostrará cómo construir un menú contextual personalizado utilizando **WinUI 3** y, opcionalmente, aprovechar **XAML Islands** para integrar componentes enriquecidos si estás migrando desde un entorno **WPF** o **WinForms**.
13+
14+
<!--more-->
15+
16+
## Requisitos previos
17+
18+
- Visual Studio 2022 o superior.
19+
- Windows App SDK 1.4+ (preferiblemente 1.5).
20+
- SDK de Windows 10/11 instalado.
21+
- Conocimiento básico de XAML y WinUI 3.
22+
23+
## Crear la base de la app en WinUI 3
24+
25+
```bash
26+
dotnet new winui3 -n CustomContextMenuDemo
27+
cd CustomContextMenuDemo
28+
```
29+
30+
Asegurate de que el `.csproj` use Windows App SDK v1.4 o superior.
31+
32+
## Diseñar el menú contextual en XAML
33+
34+
### Ejemplo básico:
35+
36+
```xml
37+
<MenuFlyout x:Key="CustomContextMenu">
38+
<MenuFlyoutItem Text="Copiar" Icon="Copy" Click="OnCopyClick"/>
39+
<MenuFlyoutItem Text="Pegar" Icon="Paste" Click="OnPasteClick"/>
40+
<MenuFlyoutSeparator />
41+
<MenuFlyoutItem Text="Opciones avanzadas" Icon="Setting" Click="OnSettingsClick"/>
42+
</MenuFlyout>
43+
```
44+
45+
En el `MainWindow.xaml`:
46+
47+
```xml
48+
<Grid RightTapped="OnGridRightTapped">
49+
<TextBlock Text="Haz clic derecho en cualquier parte del área." />
50+
</Grid>
51+
```
52+
53+
## Lógica para mostrar el menú contextual
54+
55+
```csharp
56+
private void OnGridRightTapped(object sender, RightTappedRoutedEventArgs e)
57+
{
58+
var menu = (MenuFlyout)this.Resources["CustomContextMenu"];
59+
menu.ShowAt((FrameworkElement)sender, e.GetPosition((FrameworkElement)sender));
60+
}
61+
```
62+
63+
## Agregar accesibilidad y teclas rápidas
64+
65+
```xml
66+
<MenuFlyoutItem Text="Copiar" Icon="Copy" Click="OnCopyClick" KeyboardAccelerators="{KeyboardAccelerator Key=C Modifiers=Control}"/>
67+
```
68+
69+
También se pueden agregar `AutomationProperties.Name` para accesibilidad con narrador.
70+
71+
## Integración opcional con XAML Islands
72+
73+
Si migrás desde un entorno WinForms o WPF y querés mostrar un control legado (como un gráfico de WPF) dentro del menú:
74+
75+
- Usá un `Popup` + `WindowsXamlHost` en lugar de `MenuFlyout`.
76+
- Embedí el contenido de WPF con lógica personalizada.
77+
78+
**Nota**: Esto aplica más a proyectos híbridos, no es necesario para apps puras en WinUI 3.
79+
80+
## Conclusión
81+
82+
Crear menús contextuales personalizados en **WinUI 3** permite brindar una experiencia moderna y rica al usuario final, sin sacrificar la integración nativa con el sistema operativo. A medida que evoluciona **Windows App SDK**, se pueden enriquecer aún más estos menús con animaciones, bindings MVVM y controles complejos.

0 commit comments

Comments
 (0)