WPF ListView 수정
-
20-09-2019 - |
문제
매우 구체적인 이유로 선택하고 싶습니다 ListViewItem
마우스 버튼을 올리십시오. 실제로 마우스 버튼이 아래에 있지 않습니다. 나는이 행동이 제어에 포함되기를 원한다. 이것을 달성 할 수 있습니까? 누구든지 힌트를 줄 수 있습니까?
해결책
Aviad P.의 답변은 좋은 속성의 좋은 사용이지만 첨부 된 속성을 영리하게 사용하지만 대부분 다른 기술을 사용하는 경향이 있습니다.
- 서브 클래스 ListViewItem.
- OnMouseleftButtondown과 OnMouseRightButton을 무시하여 아무것도하지 않도록했습니다.
- OnMouseleftButtonup / OnMouseRightButtonup을 재정의하여 Base.onmouseleftButtondown / Base.onmouseRightButtondown을 호출하십시오.
- 서브 클래스 ListView.
- GetContainerForitemOverride ()를 재정의하여 ListViewItem 재정기를 반환합니다
ItemContainer 이벤트에 가입하고 처리기를 동적으로 추가하는 것보다 더 쉬운 것 같습니다.
이것은 다음과 같은 것입니다.
public class MouseUpListViewItem : ListViewItem
{
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e) {}
protected override void OnMouseRightButtonDown(MouseButtonEventArgs e) {}
protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
{
base.OnMouseLeftButtonDown(e);
}
protected override void OnMouseRightButtonUp(MouseButtonEventArgs e)
{
base.OnMouseRightButtonDown(e);
}
}
public class MouseUpListView : ListView
{
protected override DependencyObject GetContainerForItemOverride()
{
return new MouseUpListViewItem();
}
}
코드가 적은 코드가 있기 때문에이 기술이 마음에 듭니다.
다른 팁
예, 첨부 된 속성을 사용하는 것은 확실히 가능합니다. 호출 된 첨부 된 속성을 정의하십시오 SelectOnMouseUp
그리고 그것이 True로 설정되면, 당신의 ItemsContainerGenerator
새 항목 컨테이너가 추가 될 때 발견 할 이벤트. 그런 다음 새 품목 컨테이너에 대한 이벤트를 얻으면 그에 연결하십시오. PreviewMouseDown
그리고 그것을 무시하십시오 (세트 e.Handled
사실), 그것에 연결하십시오 MouseUp
이벤트 및 선택을 수행하십시오 (세트 IsSelected
에게 true
).
제휴하지 않습니다 StackOverflow