You can tell what part of the row the user clicked on inside the MouseDown event. You do this using UIElements. Although, personally, I would use MouseUp.
I'm not sure how this would work, though, since the grid is already going to try to select the row when you click on it and it is not already selected.So the row will always be selected in this event and there's no way to know if it was already selected when the user clicked on it. So I don't see any way to do what you are trying to do here unless you can somehow disable the grid's selection behavior while still allowing rows to be selected in code.
Just in case you want to experiment, here's how you determine if the user clicked on a row selector:
private void ultraGrid1_MouseUp(object sender, MouseEventArgs e) { UltraGrid grid = sender as UltraGrid; // Get the last element entered by the mouse. UIElement element = grid.DisplayLayout.UIElement.LastElementEntered; // See if the element is a RowSelectorUIElement RowSelectorUIElement rowSelectorUIElement = element as RowSelectorUIElement; if (rowSelectorUIElement == null) { // If the element is not a RowSelectorUIElement, see if it is the child of one. rowSelectorUIElement = element.GetAncestor(typeof(RowSelectorUIElement)) as RowSelectorUIElement; } // If we still don't have a RowSelectorUIElement, then the user didn't click on // a row selector, so just exit. if (rowSelectorUIElement == null) return; // Get the row UltraGridRow row = rowSelectorUIElement.GetContext(typeof(UltraGridRow)) as UltraGridRow; if (row == null) { // Sanity check Debug.Fail("We got a RowSelectorUIElement with no row context; unexpected."); return; } }