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)“x:Name”问题?_Wpf_Binding - Fatal编程技术网

绑定不起作用。。。(WPF)“x:Name”问题?

绑定不起作用。。。(WPF)“x:Name”问题?,wpf,binding,Wpf,Binding,我有两个按钮,需要用一行链接它们。 我将线坐标绑定到按钮位置 我需要通过代码添加这个绑定 在XAML中,这项工作非常好,如下所示: <Button x:Name="button1" Width="10" Height="10" Canvas.Left="150" Canvas.Top="150"/> <Button x:Name="button2" Width="10" Height="10" Canvas.Left="250" Canvas.Top="100"/>

我有两个按钮,需要用一行链接它们。 我将线坐标绑定到按钮位置

我需要通过代码添加这个绑定

在XAML中,这项工作非常好,如下所示:

<Button x:Name="button1" Width="10" Height="10" Canvas.Left="150"  Canvas.Top="150"/>
<Button x:Name="button2" Width="10" Height="10" Canvas.Left="250"  Canvas.Top="100"/>

<Line x:Name="testLine" Stroke="Black"
      X1="{Binding ElementName=button1, Path=(Canvas.Left)}"
      Y1="{Binding ElementName=button1, Path=(Canvas.Top)}"
      X2="{Binding ElementName=button2, Path=(Canvas.Left)}"
      Y2="{Binding ElementName=button2, Path=(Canvas.Top)}"/>
但这不起作用

编辑:

动态创建元素时存在一个问题:

Button button1 = new Button();
Canvas.SetLeft(button1, 50);
Canvas.SetTop(button1, 50);
button1.Name = "be1";
mainCanvas.Children.Add(button1);

Button button2 = new Button();
Canvas.SetLeft(button2, 150);
Canvas.SetTop(button2, 150);
button2.Name = "be2";
mainCanvas.Children.Add(button2);

Binding b1 = new Binding() { ElementName = "be1", Path = new PropertyPath("(Canvas.Left)") };
Binding b2 = new Binding() { ElementName = "be2", Path = new PropertyPath("(Canvas.Left)") };

testLine.SetBinding(System.Windows.Shapes.Line.X1Property, b1);
testLine.SetBinding(System.Windows.Shapes.Line.X2Property, b2);
似乎be1不存在或者我不知道

button1.RegisterName(button1.Name, button1); //does not help, error...

也许这只是一个打字错误。您创建了一个绑定,但没有使用它。尝试:

testLine.SetBinding(System.Windows.Shapes.Line.X1Property, b); 

也许这只是一个打字错误。您创建了一个绑定,但没有使用它。尝试:

testLine.SetBinding(System.Windows.Shapes.Line.X1Property, b); 

你确定你不是指:

    Binding b = new Binding("(Canvas.Left)");
    b.ElementName = "button1";
    testLine.SetBinding(System.Windows.Shapes.Line.X1Property, b);
编辑:

您根本不需要元素名称:

Button button1 = new Button();
Canvas.SetLeft(button1, 50);
Canvas.SetTop(button1, 50);
mainCanvas.Children.Add(button1);

Button button2 = new Button();
Canvas.SetLeft(button2, 150);
Canvas.SetTop(button2, 150);
mainCanvas.Children.Add(button2);

//juse Source reference not ElementName
Binding b1 = new Binding() { Source = button1, Path = new PropertyPath("(Canvas.Left)") };
Binding b2 = new Binding() { Source = button2, Path = new PropertyPath("(Canvas.Left)") };

testLine.SetBinding(System.Windows.Shapes.Line.X1Property, b1);
testLine.SetBinding(System.Windows.Shapes.Line.X2Property, b2);

你确定你不是指:

    Binding b = new Binding("(Canvas.Left)");
    b.ElementName = "button1";
    testLine.SetBinding(System.Windows.Shapes.Line.X1Property, b);
编辑:

您根本不需要元素名称:

Button button1 = new Button();
Canvas.SetLeft(button1, 50);
Canvas.SetTop(button1, 50);
mainCanvas.Children.Add(button1);

Button button2 = new Button();
Canvas.SetLeft(button2, 150);
Canvas.SetTop(button2, 150);
mainCanvas.Children.Add(button2);

//juse Source reference not ElementName
Binding b1 = new Binding() { Source = button1, Path = new PropertyPath("(Canvas.Left)") };
Binding b2 = new Binding() { Source = button2, Path = new PropertyPath("(Canvas.Left)") };

testLine.SetBinding(System.Windows.Shapes.Line.X1Property, b1);
testLine.SetBinding(System.Windows.Shapes.Line.X2Property, b2);

尝试使用其他重载设置绑定。。。您正在代码中创建一个新绑定,但实际上并没有使用它

Binding b = new Binding("(Canvas.Left)");
b.ElementName = "button1";
testLine.SetBinding(System.Windows.Shapes.Line.X1Property, b);

尝试使用其他重载设置绑定。。。您正在代码中创建一个新绑定,但实际上并没有使用它

Binding b = new Binding("(Canvas.Left)");
b.ElementName = "button1";
testLine.SetBinding(System.Windows.Shapes.Line.X1Property, b);

为了解决动态名称问题,您应该执行mainCanvas.RegisterNamebe1,button1,而不是在按钮上调用RegisterName。为了解决动态名称问题,您应该执行mainCanvas.RegisterNamebe1,button1,而不是在按钮上调用RegisterName。