Связывание не работает ... (WPF) Проблема "x: Name"? - PullRequest
1 голос
/ 23 сентября 2010

У меня есть две кнопки, и мне нужно связать их линией.Я связываю координаты линии с позициями кнопок.

Мне нужно добавить эту привязку кодом.

В 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 ]

2 голосов
/ 23 сентября 2010

Вы уверены, что не имели в виду:

    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);
1 голос
/ 23 сентября 2010

Попробуйте использовать другую перегрузку SetBinding ... вы создаете новую привязку в коде, но затем фактически не используете ее.

Binding b = new Binding("(Canvas.Left)");
b.ElementName = "button1";
testLine.SetBinding(System.Windows.Shapes.Line.X1Property, b);
1 голос
/ 23 сентября 2010

Может быть, это только ошибка ввода.Вы создаете привязку, но не используете ее.Попробуйте:

testLine.SetBinding(System.Windows.Shapes.Line.X1Property, b); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...