Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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# 最低及;最大逻辑_C#_Wpf - Fatal编程技术网

C# 最低及;最大逻辑

C# 最低及;最大逻辑,c#,wpf,C#,Wpf,我在使用WPF可缩放画布库时遇到问题,该库工作平稳,但是无论我尝试什么,我都无法设置缩放(缩放)的最小值或最大值,它在没有任何限制的情况下尽可能地缩放(缩放),如何设置限制?例如,缩放不应小于1而大于5 以下是我使用的代码: void PreviewMouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e) { var x = Math.Pow(2, e.Delta / 3.0 / S

我在使用WPF可缩放画布库时遇到问题,该库工作平稳,但是无论我尝试什么,我都无法设置缩放(缩放)的最小值或最大值,它在没有任何限制的情况下尽可能地缩放(缩放),如何设置限制?例如,缩放不应小于1而大于5

以下是我使用的代码:

    void PreviewMouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e)
    {
        var x = Math.Pow(2, e.Delta / 3.0 / System.Windows.Input.Mouse.MouseWheelDeltaForOneLine);
        MyCanvas.Scale *= x;
        // Adjust the offset to make the point under the mouse stay still.
        var position = (System.Windows.Vector)e.GetPosition(basecan);
        MyCanvas.Offset = (System.Windows.Point)((System.Windows.Vector)
            (MyCanvas.Offset + position) * x - position);
        e.Handled = true;
    }
我花了几个小时试着让它工作,谢谢你的帮助


为什么不干脆将刻度调整到极限

class XXX{
    double scale = 1;
    public void PreviewMouseWheel(object sender, System.Windows.Input.MouseWheelEventArgs e){
        this.scale *= Math.Pow(2, e.Delta / 3.0 / System.Windows.Input.Mouse.MouseWheelDeltaForOneLine);
        if (this.scale > 5) this.scale = 5;
        else if (this.scale < 1) this.scale = 1;
        MyCanvas.Scale = this.scale;
    }
}
XXX类{
双刻度=1;
public void PreviewMouseWheel(对象发送器,System.Windows.Input.MouseWheelEventArgs e){
this.scale*=Math.Pow(2,e.Delta/3.0/System.Windows.Input.Mouse.mouseweeldeltaforoneline);
如果(this.scale>5)this.scale=5;
否则,如果(this.scale<1)this.scale=1;
MyCanvas.Scale=this.Scale;
}
}

climp
MyCanvas.Scale
到您的范围。@clcto,您能详细说明一下吗?
MyCanvas.Scale=Math.Max(1,Math.Min(MyCanvas.Scale*x,5))@clcto,谢谢,但不幸的是,这不起作用。已经尝试过了,由于某种原因,它没有停止,并且它会抖动。如果它抖动,这意味着可能有其他线程正在修改它。尝试创建一个新的全局变量来存储比例。请看我修改后的答案。这似乎对设置缩放限制有效,但它会弄乱调整偏移量的过程,偏移量不会保持在应有的位置,很抱歉,这是一个障碍。很高兴听到这个消息,您已经解决了至少一半的问题。我目前正在猜测偏移量是如何计算的,但请尝试
MyCanvas.offset*=Math.Pow(………)
注意:您需要根据旧比例和新比例重新计算。它们也应该在“if”语句中。