Partilhar via


Como: Criar um ContextMenu compartilhado

Você pode compartilhar um ContextMenu entre mais de um controle definindo o ContextMenu como um recurso e configurando a propriedade ContextMenu dos controles para um referência ao ContextMenu. Você pode especificar se os controles compartilham o mesmo ContextMenu ou se cada controle tem seu próprio ContextMenu através da configuração da propriedade Atributo x:Shared.

Exemplo

O exemplo a seguir cria um ContextMenu como um recurso e atribui as referências a quatro controles. O exemplo define Atributo x:Shared no ContextMenu como true, então os quatro controles compartilham a mesma instância do ContextMenu. Você pode verificar isso marcando o primeiro MenuItem no ContextMenu de um dos controles e verificando que o MenuItem é marcado no ContextMenu dos outros controles.

<ContextMenu x:Key="SharedInstanceContextMenu" x:Shared="True">
  <MenuItem Header="This MenuItem is checkable" IsCheckable="True" />
  <Separator/>
  <MenuItem Header="This is a regular MenuItem" />
</ContextMenu>


...


<Button Margin="0,5,0,0" Background="LightBlue"
    Content="This Button has a ContextMenu"
    ContextMenu="{DynamicResource SharedInstanceContextMenu}" />
<Button Background="Pink"
    Content="This Button has the same ContextMenu"
    ContextMenu="{DynamicResource SharedInstanceContextMenu}" />
<CheckBox BorderBrush="Red"
    Content="This Check Box has the same ContextMenu"
    ContextMenu="{DynamicResource SharedInstanceContextMenu}" />
<CheckBox BorderBrush="Green" 
    Content="This Check Box has the same ContextMenu"
    ContextMenu="{DynamicResource SharedInstanceContextMenu}" />

O exemplo a seguir cria um ContextMenu como um recurso e atribui as referências a quatro controles. O exemplo define Atributo x:Shared no ContextMenu como false, então uma nova instância do ContextMenu é usada por cada controle. Você pode verificar isso marcando o primeiro MenuItem no ContextMenu de um dos controles e verificando que o MenuItem não é marcado nos ContextMenu dos outros controles.

<ContextMenu x:Key="NonsharedInstanceContextMenu" x:Shared="False">
  <MenuItem Header="This MenuItem is checkable" IsCheckable="true" />
  <Separator/>
  <MenuItem Header="This is a regular MenuItem" />
</ContextMenu>


...


<Button Background="LightBlue" Margin="0,5,0,0"
    Content="This Button has a ContextMenu"
    ContextMenu="{DynamicResource NonsharedInstanceContextMenu}" />
<Button Background="Pink"
    Content="This Button has the same ContextMenu"
    ContextMenu="{DynamicResource NonsharedInstanceContextMenu}" />
<CheckBox BorderBrush="Red"
    Content="This Check Box has the same ContextMenu"
    ContextMenu="{DynamicResource NonsharedInstanceContextMenu}" />
<CheckBox BorderBrush="Green" 
    Content="This Check Box has the same ContextMenu"
    ContextMenu="{DynamicResource NonsharedInstanceContextMenu}" />

For the complete sample, see ContextMenu compartilhado entre controles de exemplo.

Consulte também

Tarefas

Como: Habilitar um ContextMenu em um controle desabilitado

Conceitos

Visão Geral do ContextMenu

Referência

Menu

MenuItem