WPF改变对象的位置
WPF changing position of an object
你知道在某种动作(例如按下按钮)后为元素分配新位置的方法吗?
假设在我的 WPF 中我有一个名为 "Windajo" 的矩形,我想将其 Y 位置更改为 actual_Y_position + 10。
我不知道如何获得实际位置,我设法改变位置的唯一功能是 Margin
。很多人都在参考 Canvas
但我做不到。
我设法用 Margin 改变了对象的位置,但它(我猜)与 MainWindow 边框有距离并且使用它有点烦人。
private async void button_Click(object sender, RoutedEventArgs e)
{
int i = 300;
do
{
Windajo.Margin = new Thickness(85, i, 80, 0);
await Task.Delay(500);
i = i - 20;
} while (i > 100);
}
如果无法参考最后一个位置,有没有办法从 Thickness 函数中获取实际值?例如,我想从 Thickness (85, i, 80, 0)
分配“85”。到一些变量。如何操作?
我想在代码中完成,就像上面的例子一样。
非常感谢您提供的任何帮助:)
您可以像这样访问 Thickness 结构的各个组件:
Windajo.Margin = new Thickness(85, i, 80, 0);
Thickness t = Windajo.Margin;
double left = t.Left;
double top = t.Top;
double right = t.Right;
double bottom = t.Bottom;
如果要将 Y 增加 10,则需要将顶部边距减小 10(如果它是顶部对齐)或将底部边距增加 10(如果它是底部对齐):
Windajo.Margin = new Thickness(85, i - 10, 80, 0); // If Top-Aligned
// -- OR --
Windajo.Margin = new Thickness(85, i - 10, 80, 0); // If Bottom-Aligned
您可以这样取实际值:
Windajo.Margin.Left
Windajo.Margin.Right
对此:
Windajo.Margin = new Thickness(85, Windajo.Margin.Top + 10, 80, 0);
你知道在某种动作(例如按下按钮)后为元素分配新位置的方法吗?
假设在我的 WPF 中我有一个名为 "Windajo" 的矩形,我想将其 Y 位置更改为 actual_Y_position + 10。
我不知道如何获得实际位置,我设法改变位置的唯一功能是 Margin
。很多人都在参考 Canvas
但我做不到。
我设法用 Margin 改变了对象的位置,但它(我猜)与 MainWindow 边框有距离并且使用它有点烦人。
private async void button_Click(object sender, RoutedEventArgs e)
{
int i = 300;
do
{
Windajo.Margin = new Thickness(85, i, 80, 0);
await Task.Delay(500);
i = i - 20;
} while (i > 100);
}
如果无法参考最后一个位置,有没有办法从 Thickness 函数中获取实际值?例如,我想从 Thickness (85, i, 80, 0)
分配“85”。到一些变量。如何操作?
我想在代码中完成,就像上面的例子一样。
非常感谢您提供的任何帮助:)
您可以像这样访问 Thickness 结构的各个组件:
Windajo.Margin = new Thickness(85, i, 80, 0);
Thickness t = Windajo.Margin;
double left = t.Left;
double top = t.Top;
double right = t.Right;
double bottom = t.Bottom;
如果要将 Y 增加 10,则需要将顶部边距减小 10(如果它是顶部对齐)或将底部边距增加 10(如果它是底部对齐):
Windajo.Margin = new Thickness(85, i - 10, 80, 0); // If Top-Aligned
// -- OR --
Windajo.Margin = new Thickness(85, i - 10, 80, 0); // If Bottom-Aligned
您可以这样取实际值:
Windajo.Margin.Left
Windajo.Margin.Right
对此:
Windajo.Margin = new Thickness(85, Windajo.Margin.Top + 10, 80, 0);