Fazer um StackPanel e seu conteúdo "draggable" em wpf?

Tenho um UserControl sob a forma de:

<UserControl>   
    <Grid>         
          <!-- Content Here-->    
      <StackPanel>   <!-- I want this element to be draggable within the usercontrol. -->    
         <Label Name = "Header" />  
         <Button />
         <Button />
         <Button />             
         </StackPanel>    
   <Grid>             
</UserControl>
O meu resultado final é ter um controlo com botões (parte do usercontrol) que podem ser arrastados..? Ou seja, móvel ... dentro do controlo do UserControl

Li sobre o polegar, mas não sei como usá-lo...Quaisquer ideias ou exemplos seriam óptimos.Obrigado!

 1
Author: user1202434, 2012-09-07

5 answers

Uma maneira muito simples de o fazer seria usar os Eventos do rato

Em primeiro lugar, enrole o seu StackPanel num Canvas para que possa ser facilmente posicionado de acordo com o local onde o utilizador o arrasta

A seguir, adicione MouseDown e MouseUp os eventos aos StackPanel. Poderá ter de dar ao seu StackPanel uma cor de fundo para receber eventos do rato.

No evento MouseDown, anexar um MouseMove manipulador de Eventos Ao StackPanel e ter o painel capturar o rato para que todos os Eventos do rato sejam tratados por zero]}.

No evento MouseUp, separe o evento MouseMove e liberte a captura do rato.

No evento MouseMove, mude as propriedades Canvas.Top e Canvas.Left do painel com base na posição actual do rato. Você precisará de uma verificação aqui para determinar se o mouse está fora do UserControl também para que o StackPanel não possa ser arrastado do ecrã.

E é isso, uma gota de ar muito básica:)
 9
Author: Rachel, 2012-09-07 16:11:18

Uma maneira seria manipular o rato no botão e mudar a sua posição ao mover o rato.

Então os passos serão:

  1. Adicione um manipulador ao botão. Mouseclick, por exemplo (ou mousedown)
  2. Quando se recebe um rato adiciona-se um manipulador ao mousemove.
  3. Verifique o movimento do rato e altere a posição do Botão
  4. Remova o manipulador após libertar o botão do rato.
 0
Author: Ignacio Soler Garcia, 2012-09-07 14:51:27

Não sei de nenhum método específico, mas intuitivamente, você pode adicionar um manipulador de eventos para arrastar o método do controlo que deseja mover, e nesse método, poderá tornar o controlo num bitmap, fazer com que esse bitmap siga o seu cursor do rato e esconder o controlo original. Quando largado (o mouse foi lançado), ele deve simplesmente definir as coordenadas do controle original para as coordenadas do mouse, descartar o bitmap, e re-activar a visibilidade do controle.

 0
Author: Can Poyrazoğlu, 2012-09-07 14:51:42

Existem alguns tutoriais disponíveis para este em MSDN e outros lugares. Tente o seguinte link para arrastar e largar WPF.

Arrastar e largar do WPF

 0
Author: Hasan Zubairi, 2012-09-07 14:54:46

Devias dar uma oportunidade ao projecto avalondock .

Isto permite-lhe criar recursos de layout ricos, como o Visual Studio faz (flutuando, acoplando, etc.).

Estou confiante que isto te ajudaria.
 0
Author: Steve B, 2012-09-07 14:56:27