WPF新手问题:如何绑定Margin属性的部分值实现控件X坐标同步
解决方案
方案1:优化布局结构(最推荐,零绑定开销)
你完全不需要硬绑定坐标,只要调整布局容器结构就能天然实现对齐效果,把DataGrid和Label放到同一个垂直排列的StackPanel里即可:
<TabControl ...> <TabItem ...> <Grid ...> <!-- 把StackPanel的Margin设为原来DataGrid的Margin即可 --> <StackPanel Margin="10,26,0,0" HorizontalAlignment="Left" Width="74"> <Label Content="SomeTable" HorizontalAlignment="Stretch" /> <DataGrid x:Name="dg_SomeTable" Height="auto" VerticalAlignment="Stretch" /> </StackPanel> </Grid> </TabItem> </TabControl>
这种写法下,Label天然和DataGrid左对齐、宽度自动匹配,完全不需要手动绑定坐标属性,是WPF布局的标准实现思路。
方案2:Canvas附加属性的正确绑定写法
如果你必须使用Canvas布局,之前绑定不生效是因为WPF的附加属性绑定需要用括号包裹属性名,正确写法如下:
<Canvas ...> <DataGrid x:Name="dg_SomeTable" Width="222" Canvas.Left="10" Canvas.Top="26" ... /> <Label Content="SomeTable" Canvas.Left="{Binding Path=(Canvas.Left), ElementName=dg_SomeTable}" Canvas.Top="0" Width="{Binding Path=ActualWidth, ElementName=dg_SomeTable}"/> </Canvas>
这里(Canvas.Left)的括号是语法要求,明确告诉XAML解析器这是附加属性,不是普通的CLR属性,绑定就能正常生效了。
内容的提问来源于stack exchange,提问作者Dominique
相关产品推荐
相关产品推荐

