Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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 绑定到画布。元素移动时左键断开_Wpf_Xaml_Binding_Runtime - Fatal编程技术网

Wpf 绑定到画布。元素移动时左键断开

Wpf 绑定到画布。元素移动时左键断开,wpf,xaml,binding,runtime,Wpf,Xaml,Binding,Runtime,我有以下画布,其中包含3个元素: <Rectangle x:Name="start" Canvas.Left="20" Canvas.Top="100" Width="25" Height="25" Fill="Pink"/> <Line X1="{Binding ConverterParameter=X, ElementName=start, Converter={StaticResource CanvasPositionC

我有以下画布,其中包含3个元素:

            <Rectangle x:Name="start" Canvas.Left="20" Canvas.Top="100" Width="25" Height="25" Fill="Pink"/>


            <Line X1="{Binding ConverterParameter=X, ElementName=start, Converter={StaticResource CanvasPositionConverter}}" 
                  Y1="{Binding ConverterParameter=Y, ElementName=start, Converter={StaticResource CanvasPositionConverter}}" 
                  X2="{Binding ConverterParameter=X, ElementName=root, Converter={StaticResource CanvasPositionConverter}}" 
                  Y2="{Binding ConverterParameter=Y, ElementName=root, Converter={StaticResource CanvasPositionConverter}}"  
                  Stroke="Red" StrokeThickness="2" />

          <!--I have something external that controls the position of this dockpanel on the canvas so on runtime it may move-->
            <DockPanel x:Name="root" Canvas.Left="0" Canvas.Top="0" Width="20" Height="20" />


它在启动时起作用,这意味着绑定的初始值是正确的(如Snoop所示);问题是dockpanel在运行时正在移动,但绑定不会更新到dockpanel的新位置。基本上我想要一条线,连接一个静态的形状到一个移动的形状。(移动的形状实际上是在一个装饰器中,用户可以拖动它来移动)

您的绑定不会更新,因为您没有绑定到
根元素
开始
元素的任何属性,而是通过绑定转换器直接从源对象检索属性值

幸运的是,您不需要那个转换器。只需编写如下绑定:

<Line X1="{Binding Path=(Canvas.Left), ElementName=start}" 
      Y1="{Binding Path=(Canvas.Top), ElementName=start}" 
      X2="{Binding Path=(Canvas.Left), ElementName=root}" 
      Y2="{Binding Path=(Canvas.Top), ElementName=root}"  
      Stroke="Red" StrokeThickness="2" />


请注意,附加属性的名称应该放在括号中。

哦,我确实先尝试了,但使用了{Binding Path=Canvas.Left,ElementName=start},但它不起作用,所以我认为我需要一个转换器。所以,(Canvas.Left)上的括号不见了。。。谢谢
<Line X1="{Binding Path=(Canvas.Left), ElementName=start}" 
      Y1="{Binding Path=(Canvas.Top), ElementName=start}" 
      X2="{Binding Path=(Canvas.Left), ElementName=root}" 
      Y2="{Binding Path=(Canvas.Top), ElementName=root}"  
      Stroke="Red" StrokeThickness="2" />