use*_*197 8 wpf center sizetocontent
我有一个WPF窗口,由于SizeToContent ="WidthAndHeight",它会随着时间的推移改变它的大小.最初,WindowStartupLocation ="CenterScreen"显示窗口正确居中,之后我将其重新定位:
Private Sub Window_SizeChanged(ByVal sender As Object, ByVal e As System.Windows.SizeChangedEventArgs) Handles Me.SizeChanged
Me.Top = (SystemParameters.WorkArea.Height - e.NewSize.Height) / 2
Me.Left = (SystemParameters.WorkArea.Width - e.NewSize.Width) / 2
End Sub
Run Code Online (Sandbox Code Playgroud)
但它会产生一个"跳跃",因为窗口首先调整大小并居中.
有没有办法顺利完成?
这对我有用:
protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo)
{
base.OnRenderSizeChanged(sizeInfo);
//Calculate half of the offset to move the form
if (sizeInfo.HeightChanged)
this.Top += (sizeInfo.PreviousSize.Height - sizeInfo.NewSize.Height) / 2;
if (sizeInfo.WidthChanged)
this.Left += (sizeInfo.PreviousSize.Width - sizeInfo.NewSize.Width) / 2;
}
Run Code Online (Sandbox Code Playgroud)
小智 0
您可以使用 TranslateTransform 来动画位置更改,而不是直接设置 Me.Top 和 Me.Left。
public static void MoveTo(this UIElement target, double newX, double newY)
{
var top = Canvas.GetTop(target);
var left = Canvas.GetLeft(target);
TranslateTransform trans = new TranslateTransform();
target.RenderTransform = trans;
DoubleAnimation anim1 = new DoubleAnimation(top, newY - top, TimeSpan.FromSeconds(10));
DoubleAnimation anim2 = new DoubleAnimation(left, newX - left, TimeSpan.FromSeconds(10));
trans.BeginAnimation(TranslateTransform.XProperty,anim1);
trans.BeginAnimation(TranslateTransform.YProperty,anim2);
}
Run Code Online (Sandbox Code Playgroud)
代码来源:WPF。以编程方式将图像移动到 (X,Y) 的最简单方法?
| 归档时间: |
|
| 查看次数: |
1980 次 |
| 最近记录: |