将元素绑定到另一个元素的边界框

时间:2014-02-04 16:33:26

标签: wpf

我有一个包含在画布中的形状,我希望在上述形状边框的底部贴一个标签。 在设计时,这是微不足道的,但是形状在运行时可以拖动,标签应该根据它移动。 我可以“手动”修改我用于拖动形状的相同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边界框的底部?

2 个答案:

答案 0 :(得分:2)

您可以将Label的Canvas.LeftCanvas.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)

最简单的方法是将CanvasLabel放入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页面了解更多信息。