Вы столкнулись с широко известной проблемой привязки в
ContextMenu,
ToolTip из-за того что эти элементы не являются частью "визуального" дерева (visual tree).
В таких случаях предлагается два стандартных решениях - использовать
PlacementTarget и прокси-объект. Первое тут должно подойти идеально.
Прежде чем показать код отмечу, что вместо использования свойства
Name в качестве ключа TextBox лучше использовать свойство
Tag.
То есть вместо:
<TextBox Name="Box_110" ...>
<TextBox Tag="Box_110" ...>
Это не принципиальное изменение, но в большинстве ответов для подобных случаев вы встретите использование именно свойство Tag.
С учетом этого привязка для
CommandParameter будет выглядеть вот так:
<Setter Property="CommandParameter" Value="{Binding Path=PlacementTarget.Tag, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=ContextMenu}}" />
И немного оффтопа:
В вашем обработчике
ContextMenuClick вы используете постоянное смещение равное 10 и код по сути для каждого кейса одинаков. Вы могли бы сократить код, предварительно заменив подсказку в Tag убрав оттуда префикс "Box_" чтобы получилось что-то подобное:
public void ContextMenuClick(object param)
{
if (int.TryParse(Convert.ToString(param), out int v))
{
StampDictionary.TextBoxes[v.ToString()].BoxValue = Name;
StampDictionary.TextBoxes[(v + 10).ToString()].BoxValue = Signature;
}
}
Если все ключи в словаре числовые, то еще проще будет заменит тип ключа на int.