【问题标题】:Silverlight 3 Datagrid: Get row/item on MouseOverSilverlight 3 Datagrid:在 MouseOver 上获取行/项目
【发布时间】:2009-12-08 10:52:36
【问题描述】:

我有一个绑定的 DataGrid 和各种其他控件(数据网格外部),它们显示了有关数据网格中选定行的更多详细信息。这很容易通过数据绑定或处理数据网格上的 SelectionChanged 事件来实现。

但是,我如何在不要求用户选择一行的情况下执行此操作 - 例如,在“鼠标悬停”上,我可以更改所选项目或获取鼠标“下方”的行/项目。

【问题讨论】:

    标签: silverlight-3.0 datagrid selection mouseover


    【解决方案1】:

    在您的容器类中尝试类似的操作,例如 UserControl、Grid、StackPanel 等...

    public class MyContainerClass : FrameworkElement
    {
        public MyContainerClass()
        {
                base.Loaded += OnLoaded;
        }
    
        private void OnLoaded(object sender, RoutedEventArgs e)
        {
            m_DataGrid.MouseMove += OnMouseMove;
        }
    
        private void OnMouseMove(object sender, MouseEventArgs e)
        {
            DataGridRow item = (sender as DependencyObject).ParentOfType<DataGridRow>();
            if (item != null && m_DataGrid.SelectedIndex != item.GetIndex())
                m_DataGrid.SelectedIndex = item.GetIndex();
        }
    }
    

    并添加这个辅助类扩展...

    internal static class DependencyObjectExt
    {
        // Extension for DependencyObject
        internal static TT ParentOfType<TT>(this DependencyObject element) where TT : DependencyObject
        {
            if (element == null)
                return default(TT);
    
            while ((element = VisualTreeHelper.GetParent(element)) != null)
            {
                if (element is TT)
                    return (TT)element;
            }
    
            return null;
        }
    }
    

    祝你好运,
    吉姆·麦柯迪
    YinYangMoney

    【讨论】:

      【解决方案2】:

      这是吉姆答案的一个更简单但不太通用的实现。在 VB.Net 中:

      Private Sub DataGrid1_LoadingRow(ByVal sender As Object, ByVal e As System.Windows.Controls.DataGridRowEventArgs) Handles DataGrid1.LoadingRow
          AddHandler e.Row.MouseEnter, AddressOf row_MouseEnter
      End Sub
      
      Private Sub row_MouseEnter(ByVal sender As Object, ByVal e As MouseEventArgs)
              Dim row = CType(sender, DataGridRow)
              Me.DataGrid1.SelectedItem = CType(row.DataContext, MyType)
      End Sub
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-15
        • 2010-11-25
        • 2011-01-02
        • 1970-01-01
        • 2011-03-08
        • 2011-04-28
        • 2023-04-08
        • 1970-01-01
        相关资源
        最近更新 更多