문제

매우 구체적인 이유로 선택하고 싶습니다 ListViewItem마우스 버튼을 올리십시오. 실제로 마우스 버튼이 아래에 있지 않습니다. 나는이 행동이 제어에 포함되기를 원한다. 이것을 달성 할 수 있습니까? 누구든지 힌트를 줄 수 있습니까?

도움이 되었습니까?

해결책

Aviad P.의 답변은 좋은 속성의 좋은 사용이지만 첨부 된 속성을 영리하게 사용하지만 대부분 다른 기술을 사용하는 경향이 있습니다.

  1. 서브 클래스 ListViewItem.
  2. OnMouseleftButtondown과 OnMouseRightButton을 무시하여 아무것도하지 않도록했습니다.
  3. OnMouseleftButtonup / OnMouseRightButtonup을 재정의하여 Base.onmouseleftButtondown / Base.onmouseRightButtondown을 호출하십시오.
  4. 서브 클래스 ListView.
  5. 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).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top