Как перемещать Grid программно - PullRequest
2 голосов
/ 19 октября 2011

В моем приложении есть Сетка, и я хочу переместить ее с помощью четырех кнопок (вверх, вниз, влево, вправо). У меня есть позиция сетки (X и Y), но я не знаю, как установить новую позицию.

Ответы [ 2 ]

1 голос
/ 19 октября 2011

Способ перемещения сетки зависит от контейнера, в котором она содержится. Если он размещен внутри Canvas, вы можете просто привязать свойства сетки Canvas.Left и Canvas.Top к некоторым свойствам вашей модели представления Вы можете затем изменить эти цифры на кнопках вверх и вниз, например:

<Canvas Width="400" Height="400">
    <Grid Height="20" Width="20" Canvas.Left="{Binding GridLeft}" Canvas.Top="{Binding GridTop}" Background="Red" />
</Canvas>

И ViewModel будет такой

class ViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    int gridLeft;
    public int GridLeft
    {
        get { return gridLeft; }
        set 
        { 
            gridLeft = value;
            PropertyChanged(this, new PropertyChangedEventArgs("GridLeft"));
        }
    }

    int gridTop;
    public int GridTop
    {
        get { return gridTop; }
        set 
        { 
            gridTop = value;
            PropertyChanged(this, new PropertyChangedEventArgs("GridTop"));
        }
    }
}
1 голос
/ 19 октября 2011

При событии нажатия клавиатуры вы можете изменить свойство Margin сетки.Это будет работать лучше всего, если у вас есть сетка, вложенная в другую сетку или холст.Вы должны помнить о родительском контейнере и о том, как он будет работать с макетом.

Предполагая, что он вложен в другой элемент управления Grid, вот пример того, как может выглядеть код:

private void OnKeyDown( object sender, System.Windows.Input.KeyEventArgs e )
{
    if( e.Key == System.Windows.Input.Key.Up )
    {
        Thickness orig = MyGrid.Margin;
        MyGrid.Margin = new Thickness( margin.Left, margin.Up - 5, margin.Right, margin.Bottom );
    }
    else if( ... )
    ...
}

ПРИМЕЧАНИЕ. Возможно, вам даже не нужно выделять новую толщинуобъект.Просто поменяй того, кто там есть.Это ради примера.

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