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?
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With