Silverlight 如何以编程方式移动网格

Silverlight 如何以编程方式移动网格,silverlight,windows-phone-7,Silverlight,Windows Phone 7,我的应用程序中有一个网格,我想使用四个按钮(上、下、左、右)移动它。我有网格的位置(X和Y),但我不知道如何设置新的位置 在键盘关闭事件中,可以更改网格的边距属性。如果将网格嵌套在另一个网格或画布中,这将最有效。您必须记住父容器以及它如何与布局一起工作 假设它嵌套在另一个网格控件中,下面是代码的示例: private void OnKeyDown( object sender, System.Windows.Input.KeyEventArgs e ) { if( e.Key == Sy

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

在键盘关闭事件中,可以更改网格的边距属性。如果将网格嵌套在另一个网格或画布中,这将最有效。您必须记住父容器以及它如何与布局一起工作

假设它嵌套在另一个网格控件中,下面是代码的示例:

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( ... )
    ...
}

注意:您甚至可能不需要分配新的厚度对象。换一个就行了。这纯粹是为了举例。

移动网格的方式取决于它所包含的容器。如果将其放置在画布中,则可以将网格的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>

我试过了,但它在移动网格后会“咀嚼”网格中的像素。移动后,它不会保持控件的完整性。假设您正在向下移动它。这意味着你将增加利润。哪一方会让像素“吃光”?父容器中是否有足够的空间用于移动?您也可以尝试将其包含在画布中。这可能会使布局更灵活。如果我向下移动网格,则向下的边距会被占用。我已经将网格放在画布中,但是当我尝试
Canvas.SetLeft(gridPlane1,20.0)时它什么都不做。我是不是遗漏了什么?我想它起作用了。问题是我正在设置left和top属性的函数。用另一种方法移动了这个东西,现在它真是太棒了。谢谢
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"));
        }
    }
}