рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдХреБрдХрдмреБрдХ: рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рд░реЗрд╕рд┐рдкреА

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдРрд╕реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реВрдВрдЧрд╛:

рдЫрд╡рд┐

рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рд╣рдо рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ (рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рджреЛ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдирдХрд╛рд░рд╛рддреНрдордХ рдХрд░реНрдо рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╢реНрд╡реЗрдд рд╕реВрдЪреА рдореЗрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдмрд┐рдВрджреБ рдХреЗ рдХрд░реАрдмред рдореИрдВ рдмрд┐рд▓реНрд▓реА рдорд╛рдБрдЧрддрд╛ рд╣реВрдБред


рддреЛ, рдкрд░рд┐рдЪрдпред


рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░, рд╣рдо рддреБрд░рдВрдд рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рд╣рдореЗрдВ рдЦреБрдж рдХреЛ рд╕рдм рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛), рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдЬреАрд╡рди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рдореЗрдВ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдЯреАрдо рд╕реЗ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреНрд░рд╢рд┐рдХреНрд╖рд┐рдд рд▓реЛрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдЯреВрд▓рдХрд┐рдЯ рдореЗрдВ рд╕рдм рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд░ рдЪреБрдХреЗ рд╣реИрдВред
рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдирд┐рдпрдВрддреНрд░рдг рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдХреБрдЫ рдмреЗрд╕рд┐рдХ рдХрдВрдЯреНрд░реЛрд▓ (рдпреВрдЬрд░ рдХрдВрдЯреНрд░реЛрд▓) рдХреЗ рд▓рд┐рдП рд░реИрдкрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ + рдбреНрд░реИрдЧрдбреНрд░реЙрдкрдЯрд╛рд░реНрдЧ ( рд▓рд┐рд╕реНрдЯрдмреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдпрд╣ рд▓рд┐рд╕реНрдЯрдмреЙрдХреНрд╕рдбреНрд░реИрдЧрдбреНрд░реЙрдкрдЯрд╛рд░реНрдЯ ) рд╣реИред рдпрд╣ рдПрдХ рд▓рд┐рд╕реНрдЯрдмреЙрдХреНрд╕ рдпрд╛ рдХрдИ рд▓рд┐рд╕реНрдЯрдмреЙрдХреНрд╕ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╣реИ, рдХрд┐ рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЪрд▓реЛ рдПрдХ рдирдпрд╛ рд╕рд┐рд▓реНрд╡рд░рд▓рд╛рдЗрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВред


рдЫрд╡рд┐

рдореИрдВрдиреЗ рдЗрд╕реЗ DragAndDropTestApp рдХрд╣рд╛, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛ред
рдЕрдЧрд▓реЗ рд╕рдВрд╡рд╛рдж рдмреЙрдХреНрд╕ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдЫреЛрдбрд╝ рджреЗрдВ рдФрд░ рдареАрдХ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред

рдЯреВрд▓рдХрд┐рдЯ рдХреЗ рд▓рд┐рдП рддреБрд░рдВрдд рдПрдХ рд▓рд┐рдВрдХ рдЬреЛрдбрд╝реЗрдВ:

рдЫрд╡рд┐

рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдкрд╣рд▓реЗ рд╣реА рдбрд╛рдЙрдирд▓реЛрдб рдФрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рдЪреБрдХрд╛ рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЛ MainPage.xaml рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:

xmlns:toolkit= "clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Toolkit"
xmlns:my= "clr-namespace:DragAndDropTestApp"

* All source code (under and below) was highlighted with Source Code Highlighter .

рдЯреВрд▓рдХрд┐рдЯ рдкрд░ред рдФрд░ рдирд╛рдо рд╕реНрдерд╛рди рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдирд┐рд╣рд┐рдд рд╣реИред

рд╕реНрдХреЗрдЪ xamlред
рддреАрди рд╕реВрдЪрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рд░реНрдХрдЕрдк рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:
< TextBlock
Text ="Users:"
Style ="{StaticResource Header}" />
< toolkit:ListBoxDragDropTarget
Grid . Row ="1"
HorizontalContentAlignment ="Stretch"
VerticalContentAlignment ="Stretch" >
< ListBox >
< ListBox.ItemTemplate >
< DataTemplate >
< my:UCUser />
</ DataTemplate >
</ ListBox.ItemTemplate >
</ ListBox >
</ toolkit:ListBoxDragDropTarget >

рддрддреНрд╡реЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реАрд░реНрд╖рдХ рдХреЗ рд╕рд╛рде рдЯреЗрдХреНрд╕реНрдЯрдмреЙрдХреНрд╕ (рд╕рднреА рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ App.xaml рдореЗрдВ рдбрдм рдХрд┐рдпрд╛ рдерд╛)ред рдФрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, ListBox рд╕реНрд╡рдпрдВ, ListBoxDragDropTarget рдореЗрдВ рд▓рд┐рдкрдЯреЗ рд╣реБрдП рд╣реИрдВред ItemTemplate рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдП рд╕рд┐рд░реЗ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред UCUser рдореЗрд░рд╛ рдЕрдкрдирд╛ рдирд┐рдпрдВрддреНрд░рдг рд╣реИред рдЕрдВрджрд░ рдХреБрдЫ рднреА рдЕрд▓реМрдХрд┐рдХ рдирд╣реАрдВ рд╣реИ, рдЕрдкрдиреЗ рд▓рд┐рдП рджреЗрдЦреЗрдВред
рдЫрд╡рд┐
  1. < рдЧреНрд░рд┐рдб
  2. x: рдирд╛рдо = "рд▓реЗрдЖрдЙрдЯрд░реВрдЯ"
  3. рдкреГрд╖реНрдарднреВрдорд┐ = "рдкрд╛рд░рджрд░реНрд╢реА" >
  4. < Grid.ColumnDefinitions >
  5. < ColumnDefinition Width = "рдСрдЯреЛ" />
  6. < ColumnDefinition Width = "4 *" />
  7. < ColumnDefinition Width = "6 *" />
  8. </ Grid.ColumnDefinitions >
  9. < Grid.RowDefinitions >
  10. < рд░реЛрд╡рдлрд┐рдирд┐рд╢рди рд╣рд╛рдЗрдЯ = "рдСрдЯреЛ" />
  11. < рд░реЛрд╡рдлрд┐рдирд┐рд╢рди рд╣рд╛рдЗрдЯ = "рдСрдЯреЛ" />
  12. </ Grid.RowDefinitions >
  13. < рдЫрд╡рд┐
  14. рд╕реНрд░реЛрдд = "../ рдЫрд╡рд┐рдпрд╛рдБ / gnome_face_devilish.png"
  15. рдЪреМрдбрд╝рд╛рдИ = "48"
  16. рдКрдБрдЪрд╛рдИ = "48"
  17. рдорд╛рд░реНрдЬрд┐рди = "15, 0, 20, 0"
  18. рдЧреНрд░рд┐рдб ред рд░реЛрд╡рд╕реНрдкреИрди = "2" />
  19. < TextBlock
  20. рдкрд╛рда = "рдЙрдкрдирд╛рдо:"
  21. рдЧреНрд░рд┐рдб ред рдХреЙрд▓рдо = "1" />
  22. < TextBlock
  23. рдкрд╛рда = "{рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкрде = рдирд┐рдХрдиреЗрдо, рдореЛрдб = рд╡рдирд╡реЗ}"
  24. рдЧреНрд░рд┐рдб ред рдХреЙрд▓рдо = "2"
  25. FontWeight = "рдмреЛрд▓реНрдб" />
  26. < TextBlock
  27. рдкрд╛рда = "рдХрд░реНрдо:"
  28. рдЧреНрд░рд┐рдб ред рд░реЛ = "1"
  29. рдЧреНрд░рд┐рдб ред рдХреЙрд▓рдо = "1" />
  30. < TextBlock
  31. рдкрд╛рда = "{рдмрдВрдзрди рдкрде = рдХрд░реНрдо, рд╡рд┐рдзрд╛ = OneWay}"
  32. рдЧреНрд░рд┐рдб ред рд░реЛ = "1"
  33. рдЧреНрд░рд┐рдб ред рдХреЙрд▓рдо = "2"
  34. FontWeight = "рдмреЛрд▓реНрдб" />
  35. </ рдЧреНрд░рд┐рдб >

рд╕реНрд░реЛрдд рдЪрд┐рддреНрд░ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдбреЗрдЯрд╛ рдмрд╛рдЗрдВрдбрд┐рдВрдЧ (рдмрд╛рдЗрдВрдбрд┐рдВрдЧ) рдкрдВрдЬреАрдХреГрдд рд╣реИред
рд╡реИрд╕реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╡рд░реНрдЧ рд╣реИред рдпрд╣рд╛рдБ рдЙрдирдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ:
public class User
{
public string NickName { get ; set ; }
public int Karma { get ; set ; }
}

рдЕрдм рдкреНрд░рддреНрдпреЗрдХ рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдПрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЛрдбрд┐рдВрдЧ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░реЗрдВ:
  1. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдЖрдВрд╢рд┐рдХ рд╡рд░реНрдЧ рдореЗрдирдкреЗрдЬ: UserControl
  2. {
  3. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдореЗрдирдкреЗрдЬ ()
  4. {
  5. рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдХрдореНрдкреЛрдиреЗрдВрдЯ ();
  6. рдпрд╣ .DataContext = рдпрд╣ ;
  7. рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХреЙрд▓реЗрдХреНрд╢рди ();
  8. рд▓реЛрдбрдпреВрдЬрд░ ();
  9. }
  10. // рд╕рдВрдЧреНрд░рд╣ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░реЗрдВ
  11. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░реЗрдХреНрд╖рдг рдпреЛрдЧреНрдп рдЕрд╡рд▓реЛрдХрди <рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛> рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ { рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ ; рд╕реЗрдЯ ; }
  12. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░реЗрдХреНрд╖рдг рдпреЛрдЧреНрдп рд╕рд╛рд╣рд┐рддреНрдп <рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛> рд╡реНрд╣рд╛рдЗрдЯрд▓рд┐рд╕реНрдЯ { рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ ; рд╕реЗрдЯ ; }
  13. рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдкреНрд░реЗрдХреНрд╖рдг рдпреЛрдЧреНрдп рд╕рд╛рд╣рд┐рддреНрдп <рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛> рдмреНрд▓реИрдХрд▓рд┐рд╕реНрдЯ { рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ ; рд╕реЗрдЯ ; }
  14. // рдкреНрд░рд╛рд░рдВрднрд┐рдХ рд╕рдВрдЧреНрд░рд╣
  15. рдирд┐рдЬреА рд╢реВрдиреНрдп рдкреНрд░рд╛рд░рдВрднрдХрд▓реЗрдХреНрд╢рди ()
  16. {
  17. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ = рдирдпрд╛ рдСрдмреНрдЬрд╝рд░реНрд╡реЗрдмрд▓ рдХреЙрд▓реЗрдХреНрд╢рди <рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛> ();
  18. рд╢реНрд╡реЗрддрд╕реВрдЪреА = рдирдпрд╛ рдкреНрд░реЗрдХреНрд╖рдг рдпреЛрдЧреНрдп рд╕рд┐рджреНрдзрд╛рдВрдд <рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛> ();
  19. BlackList = рдирдпрд╛ рд╡реЗрдзрд╢рд╛рд▓рд╛ рдХрд╛ рдЪрдпрди <<>;
  20. }
  21. // рд╡рд┐рдзрд┐ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддреА рд╣реИ
  22. рдирд┐рдЬреА рд╢реВрдиреНрдп рд▓реЛрдбрд░ ()
  23. {
  24. var r = new random ();
  25. // рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХрд░реНрдо рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде 20 рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛрдбрд╝реЗрдВред
  26. for ( int i = 1; рдореИрдВ <21; i ++)
  27. {
  28. var newUser = рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛
  29. {
  30. NickName = "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо" + i,
  31. рдХрд░реНрдо = r.Next (200) - 100
  32. };
  33. Users.Add (newUser);
  34. }
  35. }
  36. }

MainPage рдХреЗ рд▓рд┐рдП DataContext рдХреЗ рд░реВрдк рдореЗрдВ , MainPage рдХреЛ рд╣реА рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред рдореИрдВрдиреЗ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рдХрд┐рдпрд╛ рддрд╛рдХрд┐ рдореИрдВ рдбреЗрдЯрд╛ рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдЬреБрдбрд╝ рд╕рдХреВрдВред рдпрд╣ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
< ListBox ItemsSource ="{Binding Path=Users, Mode=TwoWay}" >

рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдХреЗ рд▓рд┐рдП рдЕрдиреБрдкрд▓рдмреНрдз рд╣реИ:
AllowDrop ="True"

рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЛ рд╕рд╣реА рдкрд░ рд╕реЗрдЯ рдХрд░рдХреЗ, рд╣рдо рддрддреНрд╡ рдХреЛ рдбреНрд░реИрдЧ рдПрдВрдб рдбреНрд░реЙрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдбреЗрдЯрд╛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЗрд╕реЗ ListBox рдФрд░ ListBoxDragDropTarget рджреЛрдиреЛрдВ рдореЗрдВ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реБрдЖ:

рдЫрд╡рд┐

рдЕрдм рдЖрдк рдХрд┐рд╕реА рднреА рд╕реВрдЪреА рдореЗрдВ рдирдХрд╛рд░рд╛рддреНрдордХ рдХрд░реНрдо рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЦреАрдВрдЪ рд╕рдХрддреЗ рд╣реИрдВред
рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЖрдкрдХреЛ рдПрдХ рдХреЛ рд╡реНрд╣рд╛рдЗрдЯ рд▓рд┐рд╕реНрдЯ рдореЗрдВ рдЦреАрдВрдЪрдиреЗ рдкрд░ рд░реЛрдХ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрди рдШрдЯрдирд╛рдУрдВ рдХреЛ рджреЗрдЦреЗрдВ, рдЬреЛ рдбреНрд░реИрдЧ-рдПрди-рдбреНрд░реЙрдк'рдИ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВ:

рдЫрд╡рд┐

DragEnter рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдШрд╕реАрдЯрд╛ рдЧрдпрд╛ рдХрдВрдЯреЗрдирд░ рдЧрдВрддрд╡реНрдп рддрддреНрд╡ рдХреА рд╕реАрдорд╛ рдХреЛ рдкрд╛рд░ рдХрд░ рдЬрд╛рддрд╛ рд╣реИ (DragOver рдШрдЯрдирд╛ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдЧ)ред
DragLeave - рдШрд╕реАрдЯрд╛ рдЧрдпрд╛ рдХрдВрдЯреЗрдирд░ рд╕реНрд░реЛрдд рддрддреНрд╡ рд╕реЗ рдЦреАрдВрдЪрд╛ рдЧрдпрд╛ рдерд╛ред
рдбреНрд░реИрдЧрдСрд╡рд░ - рдЬрдм рдЧрдВрддрд╡реНрдп рд╕реНрдерд╛рди рдкрд░ рдШрд╕реАрдЯрд╛ рдХрдВрдЯреЗрдирд░ рдЪрд▓рддрд╛ рд╣реИ рддреЛ рдЖрдЧ рд▓рдЧ рдЬрд╛рддреА рд╣реИред
рдбреНрд░реЙрдк - рдШрд╕реАрдЯрд╛ рдЧрдпрд╛ рдХрдВрдЯреЗрдирд░ рдЧрдВрддрд╡реНрдп рддрддреНрд╡ рддрдХ "рдЧрд┐рд░рд╛" рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╢реНрд╡реЗрддрд╕реВрдЪреА рдХреЗ рд▓рд┐рдП DragEnter рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдЬреЛрдбрд╝реЗрдВред
  1. < рдЯреВрд▓рдХрд┐рдЯ: рд▓рд┐рд╕реНрдЯрдмреЙрдХреНрд╕рдбреНрд░рд╛рдбреНрд░реЙрдкрдЯреНрд░реЗрдЯ
  2. AllowDrop = "рдЯреНрд░реВ"
  3. рдЧреНрд░рд┐рдб ред рд░реЛ = "1"
  4. рдЧреНрд░рд┐рдб ред рдХреЙрд▓рдо = "1"
  5. рдХреНрд╖реИрддрд┐рдЬрд╕рдВрдмрдВрдзреА рдЖрд░реЗрдЦрдг = "рдЦрд┐рдВрдЪрд╛рд╡"
  6. рд╡рд░реНрдЯрд┐рдХрд▓рдХрдВрдЯреЗрдВрдЯ рдСрд▓рд┐рдиреЗрдореЗрдВрдЯ = "рд╕реНрдЯреНрд░реЗрдЪ"
  7. DragEnter = "ListBoxDragDropTarget_DragEnter" >
  8. < рд▓рд┐рд╕реНрдЯрдмреЙрдХреНрд╕
  9. ItemSource = "{рдмрд╛рдЗрдВрдбрд┐рдВрдЧ рдкрде = рд╢реНрд╡реЗрддрд╕реВрдЪреА, рдореЛрдб = TwoWay}"
  10. x: рдирд╛рдо = "lbWhiteList" >
  11. < ListBox.ItemTemplate >
  12. < DataTemplate >
  13. < my: UCUser />
  14. </ DataTemplate >
  15. </ ListBox.ItemTemplate >
  16. </ ListBox >
  17. </ рдЯреВрд▓рдХрд┐рдЯ: ListBoxDragDropTarget >

рдФрд░ ListBox рдХреЛ рдПрдХ рдирд╛рдо рджреЗрдВ, рдпрд╣ рдХрд╛рдо рдореЗрдВ рдЖрдПрдЧрд╛ред

рд╣реИрдВрдбрд▓рд░ рдЦреБрдж:
  1. рдирд┐рдЬреА рд╢реВрдиреНрдп ListBoxDragDropTarget_DragEnter ( рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░реЗрд╖рдХ, Microsoftред Windows.DragEventArgs рдИ)
  2. {
  3. // рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛
  4. var dataFormat = e.Data.GetFormats () [0];
  5. // рдЖрдЗрдЯрдо рдореЗрдВ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдорд┐рд▓рд╛ рд╣реИ ItemDragEventArgs
  6. var DragEventArgs = e.Data.GetData (dataFormat) ItemDragEventArgs рдХреЗ рд░реВрдк рдореЗрдВ ;
  7. // рдбреНрд░реИрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд╡рд╕реНрддреБрдУрдВ рдХрд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдорд┐рд▓рд╛
  8. SelectionCollection sc = dragEventArgs.Data SelectionCollection рдХреЗ рд░реВрдк рдореЗрдВ ;
  9. // рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЖрдЗрдЯрдо рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ
  10. foreach (sc рдореЗрдВ var рдЖрдЗрдЯрдо)
  11. {
  12. // рдпрджрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдШрд╕реАрдЯ рдЖрдЗрдЯрдо (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ) рдореЗрдВ рдирдХрд╛рд░рд╛рддреНрдордХ рдХрд░реНрдо рд╣реИ
  13. // рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рд╢реНрд╡реЗрдд рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд░реЛрдХред
  14. рдЕрдЧрд░ (рдЖрдЗрдЯрдоред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ )ред рдХрд░реНрдо <0)
  15. {
  16. lbWhiteList.AllowDrop = false ;
  17. рддреЛрдбрд╝рдирд╛ ;
  18. }
  19. }
  20. }

DragEventArgs.Data рдПрдХ IDataObject рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдбреНрд░реИрдЧ рдЗрд╡реЗрдВрдЯ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рдбреЗрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдбреЗрдЯрд╛ рдХреЛ рд╕реАрдзреЗ рдПрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ рдЧреИрд░-рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

рдЫрд╡рд┐

рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, GetData () рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ (рдкреНрд░рд╛рд░реВрдк рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдпрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред рдФрд░ рдЖрдк GetFormats () рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╛рд░реВрдк рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд░рд┐рдгрд╛рдо ItemDragEventArgs рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдЗрд╕ рд╡рд░реНрдЧ рдореЗрдВ рдПрдХ UIElement рдкрд░ рдПрдХ рдбреНрд░реИрдЧ рдЗрд╡реЗрдВрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ рдбреЗрдЯрд╛ рдкреНрд░реЙрдкрд░реНрдЯреА рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбреНрд░реИрдЧреЗрдмрд▓ рдХрдВрдЯреЗрдирд░ рд╕реЗ рд╕реАрдзреЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рд╣рдо рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ SelectionCollection рдореЗрдВ рд▓рд╛рддреЗ рд╣реИрдВред
рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ рд╕рд╛рде рдХрдИ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЦреАрдВрдЪ рдФрд░ рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
(рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рд╕реВрдЪреАрдмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓рд┐рд╕реНрдЯрдмреЙрдХреНрд╕ рдХреЗ рд▓рд┐рдП, SelectionMode рдЧреБрдг рдХреЛ рдПрдХрд╛рдзрд┐рдХ рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВ)ред
рдпрд╣ рдкреВрд░реЗ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЪрд▓рддрд╛ рд░рд╣рддрд╛ рд╣реИ рдФрд░ рдЬрд╛рдВрдЪрддрд╛ рд╣реИ рдХрд┐ рдШрд╕реАрдЯреЗ рдЧрдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдореЗрдВ рдирдХрд╛рд░рд╛рддреНрдордХ рдХрд░реНрдо рд╡рд╛рд▓реЗ рд▓реЛрдЧ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдЕрдЧрд░ рд╡рд╣рд╛рдБ рд╣реИ, рддреЛ рд╣рдо рдмрд╕ рдЙрдиреНрд╣реЗрдВ "рдЫреЛрдбрд╝рдиреЗ" рд╕реЗ рд╕рдлреЗрдж рд╕реВрдЪреА рдореЗрдВ рдЬрд╛рдиреЗ рд╕реЗ рд░реЛрдХрддреЗ рд╣реИрдВред

рдЖрдк MouseLeave рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдореЗрдВ рдЕрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рдорд╛рди (True рдореЗрдВ) рдХреЗ рд▓рд┐рдП AllowDrop рдХреЛ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдФрд░ рдЕрдВрдд рдореЗрдВ, рдбреНрд░реИрдЧ-рдПрди-рдбреНрд░реЙрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рдПрдХ рд╕реВрдЪреА рдХреЗ рднреАрддрд░ рдЖрдЗрдЯрдо рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдХреЗрд╡рд▓ рдЖрдЗрдЯрдордкреИрдирд▓ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
< ListBox.ItemsPanel >
< ItemsPanelTemplate >
< StackPanel />
</ ItemsPanelTemplate >
</ ListBox.ItemsPanel >


рдЖрдк рдпрд╣рд╛рдВ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред

Source: https://habr.com/ru/post/In125592/


All Articles