Pergunta

Eu tenho um menu de contexto que está vinculado a uma lista de strings para que o texto de cada item de menu é um elemento da lista de string. Cada item de menu está definido para o mesmo manipulador de eventos. O que eu estou tentando fazer é descobrir é qual item de menu foi clicado quando quando o manipulador de eventos é chamado.

Eu acho que seria bastante simples de fazer, mas estou um pouco perplexo.

Se eu olhar para a janela do relógio, há uma propriedade MenuItem chamado FocusedItem. Ele tem a informação de que preciso, mas quando eu tento usá-lo não parece ser parte da classe eo código nem sequer compilar, o que eu acho estranho.

Pode alguém me aponte na direção certa?

O pouco de XAML e código que eu estou tendo problemas com:

<MenuItem Header="Add Object"  ItemsSource="{Binding ObjectClassList}" Click="AddObject_Click"/>

    private void AddObject_Click(object sender, RoutedEventArgs e)
    {
        MenuItem menuItem = sender as MenuItem;

        if (menuItem == null)
        {
            return;
        }

        // menuItem.FocusedItem // ?? does not compile


    }

Obrigado!

Foi útil?

Solução

Isso funciona para mim, mas não 100% de certeza que é o caminho certo (é no caminho certo embora!)

MenuItem m = (MenuItem)e.OriginalSource;

Eu acredito que é correto, como o "container" menuitem está encerrando os eventos para os itens do menu de cordas que você adicionou. O "OriginalSource" será o clique no item de menu corda ...

Outras dicas

Algumas notas que podem ser úteis ao ler a resposta aceito por Sk93:

void Handle_RoutedEvent(object sender, RoutedEventArgs e)
  • remetente é o elemento lógico que definiu o manipulador de eventos.
  • RoutedEventArgs.source é o elemento lógico que definiu o manipulador de eventos.
  • RoutedEventArgs.originalSource é o elemento visual que o usuário clicou.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top