Cómo: Crear un control TabControl que tenga elementos ContextMenu
Actualización: noviembre 2007
En este tema se explica cómo crear un control TabControl y asociar un control ContextMenu a cada elemento TabItem. Cuando un usuario hace clic en un elemento en ContextMenu, TabItem debe controlar el evento Click. El controlador se puede agregar a los elementos de ContextMenu, pero debe saber cuál es el destino del elemento ContextMenu para que se realice la acción adecuada.
En el ejemplo siguiente se muestra cómo hacerlo. En el primer ejemplo se crea un elemento TabItem y se asocia un control ContextMenu al elemento TabItem.
Ejemplo
<TabItem Name="backgroundcolor" Header="Choose a Background Color">
<TabItem.ContextMenu>
<ContextMenu MenuItem.Click="MyMenuHandler">
<MenuItem Header="Red" Name="red"/>
<MenuItem Header="Blue" Name="blue"/>
<MenuItem Header="Yellow" Name="yellow"/>
</ContextMenu>
</TabItem.ContextMenu>
<TabItem.Content>Some content about background colors.</TabItem.Content>
</TabItem>
En el segundo ejemplo se muestra cómo hacer que un controlador controle las llamadas del evento Click.
void MyMenuHandler(object sender, RoutedEventArgs e)
{
ContextMenu cm = (ContextMenu)sender;
target = cm.PlacementTarget;
if(e.Source==red)
{
backgroundcolor.Background = Brushes.Red;
backgroundcolor.Header = "Background red";
}
else if(e.Source==blue)
{
backgroundcolor.Background = Brushes.LightBlue;
backgroundcolor.Header = "Background blue";
}
else if(e.Source==yellow)
{
backgroundcolor.Background = Brushes.Yellow;
backgroundcolor.Header = "Background yellow";
}
}
Observe que para buscar el destino de ContextMenu, puede utilizar el código del ejemplo anterior o el siguiente.
ContextMenu cm = (ContextMenu)ContextMenu.ItemsControlFromItemContainer ((MenuItem)e.OriginalSource);
UIElement placementTarget = cm.PlacementTarget;