C# 调整WPF画布控件的大小未正确保持纵横比
我使用的调整大小代码在测试时非常有效,但当放入实际应用程序(具有更大的渲染时间)时,纵横比不再保持。如果您缓慢移动鼠标或在某些方向上晃动鼠标,则可能会使控件扭曲,使其偏离其原始纵横比,并且在实际应用中似乎只发生一次 我不是100%确定,但我想知道这是否是因为它使用C# 调整WPF画布控件的大小未正确保持纵横比,c#,wpf,xaml,C#,Wpf,Xaml,我使用的调整大小代码在测试时非常有效,但当放入实际应用程序(具有更大的渲染时间)时,纵横比不再保持。如果您缓慢移动鼠标或在某些方向上晃动鼠标,则可能会使控件扭曲,使其偏离其原始纵横比,并且在实际应用中似乎只发生一次 我不是100%确定,但我想知道这是否是因为它使用ActualHeight和ActualWidth来计算当前比率,并且这些值可能并不总是最新的 部分相关代码,其余代码可在上面链接的问题上找到: 拖拉 this.CheckAspectRatio(ref dragDeltaHorizont
ActualHeight
和ActualWidth
来计算当前比率,并且这些值可能并不总是最新的
部分相关代码,其余代码可在上面链接的问题上找到:
拖拉
this.CheckAspectRatio(ref dragDeltaHorizontal, ref dragDeltaVertical, item.ActualHeight / item.ActualWidth);
函数本身
private void CheckAspectRatio(ref double? dragDeltaHorizontal, ref double? dragDeltaVertical, double aspectRatio)
{
double? dragValue = null;
if (dragDeltaVertical.HasValue && dragDeltaHorizontal.HasValue)
{
dragValue = Math.Max(dragDeltaVertical.Value, dragDeltaHorizontal.Value);
}
else if (dragDeltaVertical.HasValue)
{
dragValue = dragDeltaVertical;
}
else if (dragDeltaHorizontal.HasValue)
{
dragValue = dragDeltaHorizontal;
}
if (dragValue.HasValue)
{
dragDeltaVertical = dragValue.Value * aspectRatio;
dragDeltaHorizontal = dragValue;
}
}
对于一个简单的问题来说,解决方案似乎很复杂。你可以发布一些显示调整大小手柄/侧面等的示例图像吗?如果你也可以共享用于生成元素的xaml或c#代码,请欣赏。嘿,为什么看起来很复杂?调整任意控件的大小不是WPF固有的,也是一项相当困难的任务,除非您知道不同的情况:)我的评论是针对链接帖子中的应答码。简单的说,你可以考虑使用而不是拖拉事件。另外,不要忘记设置操纵模式,否则您可能无法收到此答案中提到的刻度值。
ActualHeight
和ActualWidth
属性是最好使用的,并且是在任何给定时间最有可能提供正确值的属性。@Chris您为什么不使用ScaleTransform
和TranslateTransform
?在我看来,这是移动和调整控件大小的完美方式。