views:

203

answers:

1

Here's a much-abbreviated sample of my code.

<Grid>

<Polygon
  Name="ply" Grid.Column="2" Grid.Row="0" Grid.RowSpan="3"
  Fill="Orange" Stroke="Orange" Points="0,1 1,3 2,2 2,0 0,0"
/>

<Line
  Grid.Column=    "{Binding ElementName=ply, Path=Grid.Column, Mode=OneWay}"
  Grid.Row=       "{Binding ElementName=ply, Path=Grid.Row, Mode=OneWay}"
  Grid.ColumnSpan="{Binding ElementName=ply, Path=Grid.ColumnSpan, Mode=OneWay}"
  Grid.RowSpan=   "{Binding ElementName=ply, Path=Grid.RowSpan, Mode=OneWay}"
  X1="0" Y1="0" X2="1" Y2="1"
/>

</Grid>

The code compiles just fine, without any errors or warnings - but when I run the application, this appears in the output window:

System.Windows.Data Error: 39 : BindingExpression path error:
'Grid' property not found on 'object' ''Polygon' (Name='ply')'.
BindingExpression:Path=Grid.Column; DataItem='Polygon' (Name='ply');
target element is 'Line' (Name=''); target property is 'Column' (type 'Int32')

System.Windows.Data Error: 39 : BindingExpression path error:
'Grid' property not found on 'object' ''Polygon' (Name='ply')'.
BindingExpression:Path=Grid.Row; DataItem='Polygon' (Name='ply');
target element is 'Line' (Name=''); target property is 'Row' (type 'Int32')

System.Windows.Data Error: 39 : BindingExpression path error:
'Grid' property not found on 'object' ''Polygon' (Name='ply')'.
BindingExpression:Path=Grid.ColumnSpan; DataItem='Polygon' (Name='ply');
target element is 'Line' (Name=''); target property is 'ColumnSpan' (type 'Int32')

System.Windows.Data Error: 39 : BindingExpression path error:
'Grid' property not found on 'object' ''Polygon' (Name='ply')'.
BindingExpression:Path=Grid.RowSpan; DataItem='Polygon' (Name='ply');
target element is 'Line' (Name=''); target property is 'RowSpan' (type 'Int32')

I'm clearly not doing this correctly, so my question is:
How do I properly reference the attached property "Grid.Whatever" on the source element in my data-binding? Am I going to have to perform the binding in the code-behind instead, or will a XAML binding with different syntax be sufficient?

+2  A: 

You are going to laugh, but it's just slightly different syntax. You just need to put parenthesis around the attached property name (this took me forever to figure out the first time I did it):

<Line
  Grid.Column=    "{Binding ElementName=ply, Path=(Grid.Column), Mode=OneWay}"
  Grid.Row=       "{Binding ElementName=ply, Path=(Grid.Row), Mode=OneWay}"
  Grid.ColumnSpan="{Binding ElementName=ply, Path=(Grid.ColumnSpan), Mode=OneWay}"
  Grid.RowSpan=   "{Binding ElementName=ply, Path=(Grid.RowSpan), Mode=OneWay}"
  X1="0" Y1="0" X2="1" Y2="1"
/>

Hope this helps, Anderson

Anderson Imes
Works flawlessly. Yeah, I did laugh. It's so frustrating when something so simple and stupid impedes your progress for an hour.
Giffyguy
Glad I could help **and** get a laugh.
Anderson Imes