Настройки свойства TranslateX или Canvas.SetLeft программно в Silverlight - PullRequest
0 голосов
/ 02 апреля 2010

Так вот в чем проблема, я пытаюсь выровнять этот круг по числу. Когда я делаю это в смеси, это показывает, что у меня есть Left (23), я пытаюсь сделать это программно Canvas.SetLeft (thePanel, 23), который он выходит за рамки. Еще лучше, если кто-нибудь знает о контроле, подобном этому в silverlight, дайте мне знать. То, что это делает, - когда пользователь нажимает на число, зеленый кружок, как предполагается, идет к этому числу, таким образом, похоже, что пользователь выбрал его. alt text

Blend

1 Ответ

2 голосов
/ 05 апреля 2010

В вашем объекте Circle вы должны установить радиус окружности и атрибут TranslateTransform. Допустим, ваш круг имеет радиус 15:

private const double Radious = 15.0;

private double _x = Radious;
private double _y = Radious;

private TranslateTransform _translation = new TranslateTransform();

и свойства для обработки координат X и Y круга,

public double X
    {
        get { return this._x; }
        set
        {
            this._x = value;
            _translation.X = this._x - Radious;
        }
    }

    public double Y
    {
        get { return this._y; }
        set
        {
            this._y = value;
            _translation.Y = this._y - Radious;
        }
    }

и в Silverlight вы можете получить то, где пользователь щелкнул по холсту, установив этот код для события клика на панели и установить центр круга, в котором пользователь щелкнул:

//Get the points where it was clicked
Point clickPoint = e.GetPosition(Canvas);

MyCircle.X = clickPoint.X;
MyCircle.Y = clickPoint.Y;

Теперь, если вы хотите, чтобы они всегда находились в фиксированных позициях, вы можете установить условия, при которых, если пользователь щелкает вокруг числа, затем устанавливает центр круга в центр числа или просто изменяет значение X вашего круга, чтобы перейти в нужную позицию.

...