Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 元素与另一元素的绑定位置';s边界框_Wpf - Fatal编程技术网

Wpf 元素与另一元素的绑定位置';s边界框

Wpf 元素与另一元素的绑定位置';s边界框,wpf,Wpf,我有一个包含在画布中的形状,我希望在前面提到的形状边界框的底部附加一个标签。 在设计时,这很简单,但是形状在运行时是可以拖动的,标签应该根据它移动。 我可以用我用来拖动形状的相同的Shape_Mouse*方法“手动”修改标签位置,但我认为某种绑定会更干净,如果我想在运行时轻松添加元素并“附加”到形状,可能需要这样做 XAML <Canvas x:Name="canv" HorizontalAlignment="Center" Height="531" Margin="10,

我有一个包含在画布中的形状,我希望在前面提到的形状边界框的底部附加一个标签。 在设计时,这很简单,但是形状在运行时是可以拖动的,标签应该根据它移动。 我可以用我用来拖动形状的相同的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边界框的底部

最简单的方法是将
画布
标签
放入
用户控件
。您的
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网站上的页面了解更多信息。

您可以将标签的
画布。左
画布。顶部
与椭圆绑定,使其随形状移动

给椭圆赋予
x:Name
,并使用标签中的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
将与ellipse不同。所以,你可以做的是使用转换器,在那里你将通过椭圆的
Canvas.Top
,并添加一些偏移量,然后用标签的
Canvas.Top
绑定,就像我们对
Canvas.Left

所做的那样。你能发布XAML代码吗?@RohitVats我不确定它为什么有用,但是这里是:
请检查答案。是的,这可能是一种方式,但是
鼠标向下
事件将引用整个
用户控件
,从而在Containeint
用户控件
内的任意位置单击鼠标移动形状+标签,这是我试图避免的。忽略我的最后一条评论,您可以在
形状中处理指针,并从此处修改整个
用户控件的位置,因此这确实是一种方法