Silverlight 如何以编程方式移动网格
我的应用程序中有一个网格,我想使用四个按钮(上、下、左、右)移动它。我有网格的位置(X和Y),但我不知道如何设置新的位置 在键盘关闭事件中,可以更改网格的边距属性。如果将网格嵌套在另一个网格或画布中,这将最有效。您必须记住父容器以及它如何与布局一起工作 假设它嵌套在另一个网格控件中,下面是代码的示例: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
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"));
}
}
}