Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调整WPF画布控件的大小未正确保持纵横比_C#_Wpf_Xaml - Fatal编程技术网

C# 调整WPF画布控件的大小未正确保持纵横比

C# 调整WPF画布控件的大小未正确保持纵横比,c#,wpf,xaml,C#,Wpf,Xaml,我使用的调整大小代码在测试时非常有效,但当放入实际应用程序(具有更大的渲染时间)时,纵横比不再保持。如果您缓慢移动鼠标或在某些方向上晃动鼠标,则可能会使控件扭曲,使其偏离其原始纵横比,并且在实际应用中似乎只发生一次 我不是100%确定,但我想知道这是否是因为它使用ActualHeight和ActualWidth来计算当前比率,并且这些值可能并不总是最新的 部分相关代码,其余代码可在上面链接的问题上找到: 拖拉 this.CheckAspectRatio(ref dragDeltaHorizont

我使用的调整大小代码在测试时非常有效,但当放入实际应用程序(具有更大的渲染时间)时,纵横比不再保持。如果您缓慢移动鼠标或在某些方向上晃动鼠标,则可能会使控件扭曲,使其偏离其原始纵横比,并且在实际应用中似乎只发生一次

我不是100%确定,但我想知道这是否是因为它使用
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
?在我看来,这是移动和调整控件大小的完美方式。