Вы пытались использовать FindName
?
var col = uc.FindName("MyColumn") as DataGridColumn;
Редактировать: Это работает в простых случаях, но для вложенных пользовательских контролей это может не сработать.В этом случае вы можете использовать его рекурсивно, вот несколько схематично реализованных:
public static object FindNamedObject(FrameworkElement container, string name)
{
var target = container.FindName(name);
if (target == null)
{
int count = VisualTreeHelper.GetChildrenCount(container);
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(container, i) as FrameworkElement;
if (child != null)
{
target = FindNamedObject(child, name);
if (target != null)
{
break;
}
}
}
}
return target;
}