2015-12-12 3 views
1

Вы знаете какой-либо способ присвоить новое положение элементу после какого-либо действия (например, нажатие кнопки)?WPF-изменение положения объекта

Давайте предположим, что в моем WPF У меня есть прямоугольник с именем «Windajo», и я хочу, чтобы изменить свою позицию Y быть actual_Y_position + 10.

Я понятия не имею, как получить фактическое положение и только Funtion что мне удалось изменить позицию с Margin. Многие люди повторяют Canvas, но я не мог заставить его работать.

Мне удалось изменить положение объекта с помощью Margin, но это (я думаю) расстояние от границы MainWindow и использование его довольно раздражает.

private async void button_Click(object sender, RoutedEventArgs e) 
     { 
    int i = 300; 

       do 
       { 
        Windajo.Margin = new Thickness(85, i, 80, 0); 
        await Task.Delay(500); 
        i = i - 20; 
       } while (i > 100); 

     } 

Если повторение последней позиции невозможно, есть ли способ получить аксиальное значение от функции толщины? Например, я хочу назначить «85» от Thickness (85, i, 80, 0). к некоторой переменной. Как это сделать?

Я хотел был бы сделать это внутри кода, как пример выше.

Я очень признателен за любую помощь вы можете предоставить :)

+0

Не используйте поля для абсолютного позиционирования. Вместо этого поставьте Rectangle в холст и установите его свойства Canvas.Left и Canvas.Top. В коде позади вы должны использовать статические методы 'Canvas.SetLeft' и' Canvas.SetTop', например 'Canvas.SetTop (Windajo, Canvas.GetTop (Windajo) - 20);'. – Clemens

ответ

0

Вы можете получить доступ к отдельным компонентам Толщина структуры, как это:

Windajo.Margin = new Thickness(85, i, 80, 0); 
Thickness t = Windajo.Margin; 
double left = t.Left; 
double top = t.Top; 
double right = t.Right; 
double bottom = t.Bottom; 

Если вы хотите увеличить Y на 10, то необходимо уменьшить Верхнее поле на 10, если он является самым выравниванием или увеличить нижнее поле на 10, если она Bottom выравниванием:

Windajo.Margin = new Thickness(85, i - 10, 80, 0); // If Top-Aligned 
// -- OR -- 
Windajo.Margin = new Thickness(85, i - 10, 80, 0); // If Bottom-Aligned 
1

Вы можете принять фактическое значение следующим образом:

Windajo.Margin.Left 
Windajo.Margin.Right 

И это:

Windajo.Margin = new Thickness(85, Windajo.Margin.Top + 10, 80, 0); 
Смежные вопросы