Окончил Пажеский Его Императорского Величества корпус (1869), из которого был выпущен офицером в лейб-гвардии Конный полк.
Командир 1-й Семиреченской сотни в 1874—1876 гг.
Участник русско-турецкой войны 1877-1878 гг.. Подполковник (4.06.1877). Полковник (6.01.1878).
С 1886 г. командир 25-го драгунского Казанского полка (18.08.1886 — 5.12.1890).
Командир Закаспийской конной казачьей бригады (5.12.1890 — 3.12.1897). Генерал-майор (5.12.1890).
Командующий 15-й кавалерийской дивизией (3.12.1897 — 31.05.1899).
Начальник 10-й кавалерийской дивизии (31.05.1899 — 25.04.1901). Генерал-лейтенант (6.12.1899).
Командир 2-го Сибирского армейского корпуса (25.04.1901 — 2.11.1902).
Командир 1-го кавалерийского корпуса (2.11.1902 - 2.03.1904).
В распоряжении командующего Маньчжурской армией (2.03.1904 - 5.04.1904).
Во время русско-японской войны командовал 1-м Сибирским корпусом (5.04.1904 — 17.03.1905) и Южным отрядом Маньчжурской армии.
Командующий армией генерал от инфантерии Куропаткин направил из района Инкоу – Гайпин на юг к Квантунскому полуострову на выручку Порт-Артура 32 батальона 1-го Сибирского корпуса генерал-лейтенанта Штакельберга, которому поставил весьма неопределённые задачи, предписав «не доводить дела до решительного столкновения» и «не допускать израсходования всего вашего резерва в бою». Тем не менее корпус ввязался в бой. В сражении у Вафангоу 1-2 июня 1904 года Штакельбергу противостояли 48 батальонов армии генерала Оку при двукратном превосходстве японцев в артиллерии. 1-й Сибирский корпус, потеряв около 3,5 тыс. человек против около 1200 японцев, под угрозой обхода с флангов был вынужден отступить к северу.
В сражении при Ляояне был контужен.
После сражения при Сандепу был отстранён от командования корпусом.
Генерал от кавалерии (6.12.1907).
С 17 марта 1905 года член Александровского комитета о раненых.
1 ноября 1905 г. был награждён орденом святого Георгия 4-й степени: