Sorry, work has been keeping me busy. You could do this:
Assuming xaml:
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Button x:Name="btn" Grid.Column="1"/>
</Grid>
The following code should give you some options:
//do this if you can:
btn.GetValue(Grid.ColumnProperty);
//Otherwise,
//gets all the dependency properties in the app domain
Type depType = typeof(DependencyProperty) ;
FieldInfo info = depType.GetField("PropertyFromName", BindingFlags.NonPublic | BindingFlags.Static);
Hashtable AllDependencyProperties = info.GetValue(null) as Hashtable;
//Index the hashtable of all dependency properties using a FromNameKey type
Type FromNameKeyType = depType.Assembly.GetType("System.Windows.DependencyProperty+FromNameKey");
ConstructorInfo ctor = FromNameKeyType.GetConstructor(new Type[] { typeof(String), typeof(Type) });
var NameKey = ctor.Invoke(new object[] { "Column", typeof(Grid) });
//index the hashtable to get the Dependency property
DependencyProperty dp = AllDependencyProperties[NameKey] as DependencyProperty;
//use the dp to get the value
btn.GetValue(dp);
//Or, without indexing a list of all dependency properties
//get a dependency property by name
System.Reflection.MethodInfo FromNameMethod = depType.GetMethod("FromName",System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.NonPublic );
var ret = FromNameMethod.Invoke(null, new object[] { "Column", typeof(Grid) });
//use it to get a value from an object
btn.GetValue((ret as DependencyProperty));
Caveat: this is using private members and classes which, MS could well change in some future version.