Программная привязка Silverlight из кода C # - PullRequest
0 голосов
/ 05 марта 2010

У меня есть Canvas и пользовательский элемент управления с именем BasicShape
После того, как я добавлю два элемента управления BasicShape на Canvas, я хочу программно соединить их со строкой, и я хочу сделать это с помощью класса Binding.

Я хочу соединить нижнюю сторону первой фигуры с верхней стороной второй.

Первоначально я пытался соединить только свойство X1 строки со вложенным свойством Canvas.Left fisrt BasicShape, но это не работает. Свойство линии X1 не обновляется при изменении значения Canvas.SetLeft (basicShape1)

        BasicShape bs1 = canvas.Children[0] as BasicShape;
        BasicShape bs2 = canvas.Children[1] as BasicShape;

        Line line = new Line();
        line.StrokeThickness = 1;
        line.Stroke = new SolidColorBrush(Colors.Red);
        line.X1 = 100;
        line.Y1 = 100;
        line.X2 = 200;
        line.Y2 = 200;
        canvas.Children.Add(line);

        Binding b = new Binding("AnyName");
        b.Source = bs1;
        b.Path = new PropertyPath(Canvas.LeftProperty);
        line.SetBinding(Line.X1Property, b);

Я пытаюсь создать простую диаграмму UML, подобную этой альтернативный текст http://www.invariant -corp.com / omechron / images / uml_diagram.gif

1 Ответ

0 голосов
/ 05 марта 2010

Я просто сделал это другим способом, без привязки

Это будет постоянная ссылка http://calciusorin.com/SilverlightDiagrams/

Я решил вручную обновить все линии на фигуре, изменилось местоположение или размер

    private void basicShape_BasicShapeLocationSizeChangedEvent(BasicShape sender)
    {
        foreach (CustomLine customLine in lines)
        {
            if (customLine.StartFromShape(sender))
            {
                Point point = sender.GetLinePoint(customLine.GetStartSide());
                customLine.SetStartPoint(point);
            }
            if (customLine.EndInShape(sender))
            {
                Point point = sender.GetLinePoint(customLine.GetEndSide());
                customLine.SetEndPoint(point);
            }
        }
    }

Я уверен, что решение Binding будет более элегантным.Любой, кто интересуется моим решением, с элементами управления SL, размеры которых можно изменять, соединять линиями, просто свяжитесь со мной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...