2012-09-13 4 views
1

Infragistics XamDataCards WPF 컨트롤에서 마우스 오른쪽 버튼을 클릭 할 때 카드를 선택하는 방법은 무엇입니까? XamDataCards.ActiveDataItem 속성도 변경해야합니다.Infragistics XamDataCards에서 오른쪽 마우스 버튼을 클릭하여 카드 선택

/// <summary> 
/// selects XamDataCards'es card on right button mouse down even 
/// </summary> 
public class XamDataCardsSelectCardOnRightMouseClickBehavior : Behavior<XamDataCards> 
{ 
    protected override void OnAttached() 
    { 
     AssociatedObject.PreviewMouseRightButtonDown += AssociatedObjectPreviewMouseRightButtonDown; 
    } 

    /// <summary> 
    /// select a card on right-click so that a context menu can be displayed 
    /// </summary> 
    /// <param name="sender">not used</param> 
    /// <param name="e">contians mouse position</param> 
    private void AssociatedObjectPreviewMouseRightButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e) 
    { 
     VisualTreeHelper.HitTest(this.AssociatedObject, t => HitTestFilterBehavior.Continue, HitTestResultFunc, new PointHitTestParameters(e.GetPosition((UIElement)sender))); 
    } 

    /// <summary> 
    /// WPF invokes this method to report hit test intersections to the user. 
    /// If a card was hit, it is set as active (or selected) card. 
    /// </summary> 
    /// <param name="result">Contains the visual object that was hit.</param> 
    /// <returns>Always returns Continue.</returns> 
    public HitTestResultBehavior HitTestResultFunc(HitTestResult result) 
    { 
     DependencyObject dobj = result.VisualHit; 
     if (VisualTreeHelper.GetParent(dobj).GetType() == typeof(Infragistics.Windows.DataPresenter.DataRecordPresenter)) 
     { 
      DataRecordPresenter rp = (DataRecordPresenter) VisualTreeHelper.GetParent(dobj); 
      this.AssociatedObject.ActiveDataItem = rp.DataRecord.DataItem; 
     } 
     return HitTestResultBehavior.Continue; 
    } 
} 

를 그리고 단순히 XamDataCards 제어에 첨부 :

답변

1

이 솔루션은 또한 활성화 카드의 헤더 오른쪽 클릭하면 카드 :

class XamDataCardsActivateOnRightMouseClickBehavior : Behavior<XamDataCards> 
{ 
    protected override void OnAttached() 
    { 
     AssociatedObject.PreviewMouseRightButtonDown += AssociatedObjectPreviewMouseRightButtonDown; 
    } 

    private void AssociatedObjectPreviewMouseRightButtonDown(object sender, System.Windows.Input.MouseButtonEventArgs e) 
    { 
     CardViewCard card = Infragistics.Windows.Utilities.GetAncestorFromType(e.OriginalSource as DependencyObject, typeof(CardViewCard), false) as CardViewCard; 
     if (card != null) 
     { 
      DataRecord record = card.DataContext as DataRecord; 
      if (record != null) 
      { 
       record.DataPresenter.ActiveRecord = record; 
      } 
     } 
    } 
} 
+0

예,이 솔루션이 내 것보다 훨씬 낫습니다. 감사합니다. –

1

나는 해결책 이미 가지고있다.

+0

내가 그리드의 헤더가 바로 데이터에 추가를 클릭 할 때 기록을 활성화 또 다른 동작을 추가 카드 부분. – alhalama

관련 문제