gpt4 book ai didi

wpf - 元素移动时绑定(bind)到 Canvas.Left 会中断

转载 作者:行者123 更新时间:2023-12-04 23:29:25 26 4
gpt4 key购买 nike

我有以下具有 3 个元素的 Canvas:

            <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" />

CanvasPositionConverter 是这样的:
   public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{

if (parameter.ToString().ToLower() == "x")

return Canvas.GetLeft(value as FrameworkElement);

else if (parameter.ToString().ToLower() == "y")

return Canvas.GetTop(value as FrameworkElement);


else throw new Exception("Need a ConverterParameter of either X or Y");
}

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

最佳答案

您的绑定(bind)没有更新,因为您没有绑定(bind)到 root 的任何属性。或 start元素,而是通过绑定(bind)转换器直接从源对象中检索属性值。

幸运的是你不需要那个转换器。只需像这样编写绑定(bind):

<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 property path 中的括号中。 .

关于wpf - 元素移动时绑定(bind)到 Canvas.Left 会中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20609974/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com