如何以编程方式移动网格

时间:2011-10-19 12:19:34

标签: silverlight windows-phone-7

我的应用程序中有一个Grid,我想使用四个按钮(向上,向下,向左,向右)移动它。我有网格的位置(X和Y),但我不知道如何设置新的位置。

2 个答案:

答案 0 :(得分:1)

在键盘向下事件中,您可以更改网格的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( ... )
    ...
}

注意:您甚至可能不需要分配新的Thickness对象。只需改变那里的那个。这纯粹是为了举例。

答案 1 :(得分:1)

移动网格的方式取决于它所包含的容器。如果它放在Canvas中,那么你可以将网格的Canvas.Left和Canvas.Top属性绑定到viewmodel中的某些属性,然后你可以在上下按钮上更改这些数字,如下所示:

<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"));
        }
    }
}
相关问题