ListBox에서 하나의 항목만 드래그 드롭 하는 경우는 많이 봤을 것입니다.
하지만 여러 항목을 선택해서 드래그 드롭을 하려면 어렵네요.
윈도우를 이용하다보면 윈도우 탐색기 같은 곳에서는 아주 쉽게 구현되어 있는데 말이죠~
ListBox를 MultiExtended로 설정하고 여러 항목을 선택한 후 드래그 하려고 클릭을 하면 선택영역이 해제가 되어 버립니다.
ListBox에서 mouseDown 이벤트가 발생하면 해당 항목만 제외하고는 선택영역을 해제하는 기능이 있나봅니다.
이럴 때는 ListBox를 상속받아서 새로운 ListBox를 만들고 ListBoxItem을 넣는 방법을 쓰면 됩니다.
OnMouseLeftButtonDown이벤트는 아무것도 실행하지 말고, OnMouseLeftButtonUp이벤트가 발생할 때 상위 클래스의 메써드를 호출하면 골치아픈 문제를 해결할 수 있습니다.
저도 이 문제로 골치 깨나 아팠는데요. 알아내고 나니 더 쉬운 방법은 없는지 고민하게 되네요. 혹시 이것보다 더 좋은 방법은 없을까요?
Visual Studio.net 에서는 Designer가 있어서 Control 관련 부분은 수정하기가 좀 귀찮은게 단점이네요.
출처: http://forums.msdn.microsoft.com/en-US/wpf/thread/e7f213e3-d8c0-4d13-8c39-51b214715c8a, matte303님의 댓글
하지만 여러 항목을 선택해서 드래그 드롭을 하려면 어렵네요.
윈도우를 이용하다보면 윈도우 탐색기 같은 곳에서는 아주 쉽게 구현되어 있는데 말이죠~
ListBox를 MultiExtended로 설정하고 여러 항목을 선택한 후 드래그 하려고 클릭을 하면 선택영역이 해제가 되어 버립니다.
ListBox에서 mouseDown 이벤트가 발생하면 해당 항목만 제외하고는 선택영역을 해제하는 기능이 있나봅니다.
이럴 때는 ListBox를 상속받아서 새로운 ListBox를 만들고 ListBoxItem을 넣는 방법을 쓰면 됩니다.
public class MyListBox : ListBox
{
protected override DependencyObject GetContainerForItemOverride()
{
return new MyListBoxItem();
}
}
public class MyListBoxItem : ListBoxItem
{
protected override void OnMouseEnter( MouseEventArgs e )
{
}
protected override void OnMouseLeftButtonDown( MouseButtonEventArgs e )
{
}
protected override void OnMouseLeftButtonUp( MouseButtonEventArgs e )
{
base.OnMouseLeftButtonDown( e );
}
}
{
protected override DependencyObject GetContainerForItemOverride()
{
return new MyListBoxItem();
}
}
public class MyListBoxItem : ListBoxItem
{
protected override void OnMouseEnter( MouseEventArgs e )
{
}
protected override void OnMouseLeftButtonDown( MouseButtonEventArgs e )
{
}
protected override void OnMouseLeftButtonUp( MouseButtonEventArgs e )
{
base.OnMouseLeftButtonDown( e );
}
}
OnMouseLeftButtonDown이벤트는 아무것도 실행하지 말고, OnMouseLeftButtonUp이벤트가 발생할 때 상위 클래스의 메써드를 호출하면 골치아픈 문제를 해결할 수 있습니다.
저도 이 문제로 골치 깨나 아팠는데요. 알아내고 나니 더 쉬운 방법은 없는지 고민하게 되네요. 혹시 이것보다 더 좋은 방법은 없을까요?
Visual Studio.net 에서는 Designer가 있어서 Control 관련 부분은 수정하기가 좀 귀찮은게 단점이네요.
출처: http://forums.msdn.microsoft.com/en-US/wpf/thread/e7f213e3-d8c0-4d13-8c39-51b214715c8a, matte303님의 댓글