代码之家  ›  专栏  ›  技术社区  ›  serhio

绑定不工作…(WPF)“x:Name”问题?

  •  1
  • serhio  · 技术社区  · 15 年前

    我有两个按钮,需要用一条线把它们连接起来。 我将线坐标绑定到按钮位置。

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

    在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)}"/>
    

    现在,在代码中,我尝试:

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

    但这不起作用。。。(

    编辑:

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

    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...
    
    3 回复  |  直到 15 年前
        1
  •  2
  •   MrDosu    15 年前

        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);
    
        2
  •  1
  •   HCL    15 年前

    可能只是打字错误。创建绑定但不使用它。尝试:

    testLine.SetBinding(System.Windows.Shapes.Line.X1Property, b); 
    
        3
  •  1
  •   Philip Rieck    15 年前

    试着用另一个超负荷的SetBinding。。。您正在代码中创建一个新绑定,但实际上并没有使用它。

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