首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >单击鼠标右键在Infragistics中选择一张卡

单击鼠标右键在Infragistics中选择一张卡
EN

Stack Overflow用户
提问于 2012-09-13 18:53:19
回答 2查看 480关注 0票数 1

如何选择一张卡在右击鼠标点击在Infragistics WPF控制?XamDataCards.ActiveDataItem属性也应该更改。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-13 22:28:36

如果右键单击卡片的标题,此解决方案还将激活卡片:

代码语言:javascript
运行
复制
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;
            }
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2012-09-13 20:54:24

我已经有了一个解决方案:

代码语言:javascript
运行
复制
/// <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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12404623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档