2015-01-03 2 views
0

System.Windows.Controls.Image 및 My Grid의 각 RowDefinition에서 레이블과 같은 컨트롤이있는 Grid가 있습니다. 문제는 내가 마우스 오른쪽 버튼을 클릭했을 때 contextmenu가 작동하고 그리드를 다시 얻을 수 있지만 클릭이 발생한 행을 가져올 수없는 경우입니다.GridLot # ContextMenu 액션 가져 오기

  • 사용자가 행 경계 내의 아무 요소 나 클릭 할 수 있기를 원하기 때문에 어떤 UIElement를 클릭했는지 알 수 없습니다. 마우스 위치 & 그리드 주어진 여기

내가 이미 가지고있는 것입니다,

<Grid.ContextMenu> 
       <ContextMenu> 
        <MenuItem Header="Open Client CP" Background="#FF1C1C1C"/> 
        <MenuItem Header="Auto Mine" Background="#FF1C1C1C"/> 
        <MenuItem Header="Disconnect" Background="#FF1C1C1C"/> 
        <MenuItem Header="Uninstall" Background="#FF1C1C1C"/> 
        <MenuItem Header="Refresh" Background="#FF1C1C1C" Click="onRefreshMenuClick" CommandParameter="{Binding RelativeSource={RelativeSource Self}, Path=Parent}"/> 
       </ContextMenu> 
      </Grid.ContextMenu> 


private void onRefreshMenuClick(object sender, RoutedEventArgs e) 
    { 
     MenuItem mi = sender as MenuItem; 
     if (mi != null) 
     { 
      ContextMenu cm = mi.CommandParameter as ContextMenu; 
      if (cm != null) 
      { 
       Grid g = cm.PlacementTarget as Grid; 
       if (g != null) 
       { 
// need something here like g.getrowof(cm.placementtarget) 
        if (debugWindow != null) 
         debugWindow.LogTextBox.AppendText("Requested refresh from "+ row); 
       } 
      } 
     } 
    } 

답변

0

당신은 DataGridRow에 대한 시험을 칠 수있다.

// Retrieve the coordinate of the mouse position. 
Point pt = e.GetPosition((UIElement)sender); 

DataGridRow row = null; 

// Set up a callback to receive the hit test result enumeration. 
VisualTreeHelper.HitTest(myGrid, null, 
    new HitTestResultCallback(res => { 
     row = res.VisualHit as DataGridRow; 
     return row != null ? HitTestResultBehavior.Stop : 
     HitTestResultBehavior.Continue; 
    }), 
    new PointHitTestParameters(pt)); 

http://msdn.microsoft.com/en-us/library/ms752097.aspx

0

어쩌면 이런 일이

private void DoStuff(object sender, RoutedEventArgs e) 
{ 
    // Get the selected MenuItem 
    var menuItem = (MenuItem)sender; 

    // Get the ContextMenu for the menuItem 
    var ctxtMenu = (ContextMenu)menuItem.Parent; 

    // Get the placementTarget of the ContextMenu 
    var item = (DataGrid)ctxtMenu.PlacementTarget; 

    // Now you can get selected item/cell etc.. and cast it to your object 
    // example: 
    //var someObject = (SomeObject)item.SelectedCells[0].Item; 

    // rest of code.... 
} 
을? : (비주얼 계층에서 적중 테스트)
관련 문제