Qual é a melhor maneira de replicar a funcionalidade de uma interface do usuário do Windows Explorer na WPF?

StackOverflow https://stackoverflow.com/questions/2246823

Pergunta

Então, estou usando FileSystemWatcher para preencher e atualizar uma lista de reprodução. Quero replicar muitos recursos do Windows Explorer, o mais importante:
* Renomear em linha
* Clique lento duplo para renomear

Estou tendo um aborrecimento fazendo isso, então pensei, talvez haja uma maneira mais fácil do que reimplementar a roda? Talvez eu possa de alguma forma hospedar uma janela do Windows Explorer no meu aplicativo como controle?

Foi útil?

Solução

Hospedando uma janela real do Windows Explorer em seu aplicativo é possível, mas repleta de perigos: as técnicas são diferentes no XP vs Vista vs Win7 e você estará lidando com todo tipo de material de baixo nível. Eu recomendaria fortemente não tentar.

Eu acho que suas melhores opções são:

  1. Use Microsoft.win32.openfiledialog se puder ser facilmente adaptado à sua necessidade, ou
  2. Codifique sua própria funcionalidade, ou se você é muito corajoso:
  3. Inicie uma janela do Explorer separado, opcionalmente com o código que tenta forçar sua posição e tamanho a serem superados (isso também é difícil ...)

Notas sobre o recurso de renomear em linha

A renomeação inline e o clique lento para renomear os recursos são realmente bastante triviais de implementar.

No seu modelo de visualização Adicionar:

  • Um String dependencyProperty de "nome do newName"
  • Uma "renomeação" de dependência da BOOL com um PropertyChangedCallback. Quando a "renomeação" é verdadeira, copie o nome para o newName. Quando for falso, se newName! = Nome renomear o arquivo um nome de atualização.

No seu datatemplate, adicione um gatilho na "renomeação" que substitui o seu textblock vinculado ao "nome" por uma caixa de texto ligada a "newName".

Adicione estes manipuladores de eventos: * KeyDown Event: Se F2 for pressionado renomeação de alternância. Se Enter for pressionado e renomeando, defina renomeação = false. Se o ESC for pressionado e renomear o nome de cópia para newName e definir renoming = false. * Evento Lostfocus: Definir renomeação = False * SeleçãoChanged Event no contêiner: registro registro de data e hora da última seleção. * Evento de Mousedown: Se o clique e a seleção esquerda alterados> 0,5 segundos atrás, defina renomeação = true

Muitos outros recursos do Explorer View são igualmente fáceis de implementar, como agrupamento e várias colunas.

Espero que isto ajude.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top