我的应用程序中有一个Grid,我想使用四个按钮(向上,向下,向左,向右)移动它。我有网格的位置(X和Y),但我不知道如何设置新的位置。
答案 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"));
}
}
}