【问题标题】:Silverlight Datagrid select row and column on right clickSilverlight Datagrid 在右键单击时选择行和列
【发布时间】:2012-01-02 16:40:13
【问题描述】:

我需要为数据网格中的单元格提供右键单击弹出上下文菜单支持。 有些人可能知道 Silverlight 4 DataGrid 如果您右键单击该项目,那么您的选择不会随着您右键单击的任何内容而更新。

相关的 StackOverflow 问题 (Silverlight Datagrid select on right click) 解决了这个问题的大部分,因为它在使用右键单击时选择了正确的行。

我的问题是如何选择正确的列?

谢谢, 贾恩斯


更新:我在 DataGridColumn(和 DataGridRow)类上发现了一个静态方法,它帮助我创建了一个解决方案。

【问题讨论】:

  • 我有一个可能的答案...等待所需的 7/8 小时过去后,我才能回答我自己的问题。

标签: silverlight datagrid


【解决方案1】:

不确定这是不是最好的解决方案,但目前看来可行。

这是一个通用的辅助方法:

private T GetParentFromVisualTree<T>( DependencyObject dependencyObject ) where T : DependencyObject
{
    // Iteratively traverse the visual tree
    while ( dependencyObject != null && !( dependencyObject is T ) )
        dependencyObject = VisualTreeHelper.GetParent( dependencyObject );

    if ( dependencyObject == null )
        return null;

    return dependencyObject as T;
}

然后我根据上面提到的其他 StackOverflow 问题在 Row_MouseRightButonDown 事件中使用它:

private void DataGrid_LoadingRow( object sender, DataGridRowEventArgs e )
{
    e.Row.MouseRightButtonDown += Row_MouseRightButtonDown;
}

private void DataGrid_UnloadingRow( object sender, DataGridRowEventArgs e )
{
    e.Row.MouseRightButtonDown -= Row_MouseRightButtonDown;
}

private void Row_MouseRightButtonDown( object sender, MouseButtonEventArgs e )
{
    var dataGridRow = sender as DataGridRow;
    if (dataGridRow == null)
        return;

    // Select the row
    DataGrid.SelectedItem = dataGridRow.DataContext;

    // Select the column
    var dataGridCell = GetParentFromVisualTree<DataGridCell>( e.OriginalSource as DependencyObject );
    if ( dataGridCell != null )
    {
        var dataGridColumn = DataGridColumn.GetColumnContainingElement( dataGridCell );
        DataGrid.CurrentColumn = dataGridColumn;
    }
}

【讨论】:

  • 因为你设置了 SelectedItem,你可以避免使用其余的,通过使用类似于 ((TextBlock)dataGrid1.CurrentColumn.GetCellContent(dataGrid1.SelectedItem)).Text;本文中提到的:msdn.microsoft.com/en-us/library/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-03
  • 1970-01-01
  • 1970-01-01
  • 2010-12-20
  • 2013-08-22
相关资源
最近更新 更多