我有一个包含在画布中的形状,我希望在上述形状边框的底部贴一个标签。 在设计时,这是微不足道的,但是形状在运行时可以拖动,标签应该根据它移动。 我可以“手动”修改我用于拖动形状的相同Shape_Mouse *方法中的标签位置,但我认为某种类型的绑定会更干净,如果我想轻松添加元素并“附加”到运行时的形状......
XAML
<Canvas x:Name="canv" HorizontalAlignment="Center" Height="531"
Margin="10,10,0,0" VerticalAlignment="Top" Width="947"
Background="#FFCDF3EB">
<Ellipse Fill="#FFF3A7A7" Height="113" Canvas.Left="120" Stroke="Black"
Canvas.Top="173" Width="125"/>
<Label Content="Label" Height="39" Canvas.Left="120" Canvas.Top="286"
Width="125"/>
</Canvas>
那么,有没有办法轻松地将元素A的位置绑定到WPF中元素B边界框的底部?
答案 0 :(得分:2)
您可以将Label的Canvas.Left
和Canvas.Top
与椭圆绑定,使其随形状移动。
将x:Name
赋予椭圆并使用Label中的ElementName进行绑定。
<Ellipse x:Name="ellipse" Fill="#FFF3A7A7" Height="113" Canvas.Left="120"
Stroke="Black" Canvas.Top="173" Width="125"/>
<Label Content="Label" Height="39"
Canvas.Left="{Binding (Canvas.Left),ElementName=ellipse}"
Canvas.Top="286"
Width="125"/>
Canvas.Top
与椭圆的不同。所以,你可以做的是转换器,你将传递Canvas.Top
椭圆并向其添加一些偏移并与Canvas.Top
标签绑定,就像我们对Canvas.Left
所做的那样。
答案 1 :(得分:1)
最简单的方法是将Canvas
和Label
放入UserControl
。您的UserControl
XAML看起来像这样:
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Canvas Grid.Row="0" ... />
<TextBlock Grid.Row="1" Text="Some description" ... />
</Grid>
现在,当用户移动UserControl
时,Canvas
和标签将一起移动,无需任何连续的位置计算。
您可以在C#Corner网站上查看User Control in WPF页面了解更多信息。