Arrow anti pattern with crutch How can I improve this code and avoid crutch? Can I use a case operator?

public bool Crutch;

public void Resize(SizeChangedEventArgs input)
    {
        if (input.NewSize.Width &lt; 450 &amp;&amp; Crutch)
        {
            if (!ServiceLocator.Current.GetInstance&lt;MultiViewModel&gt;().EightBoxesCommandIsEnabled)
            {
                ChangeToSmall(2, 2);
            }
        }

        if (input.NewSize.Width &lt; 550 &amp;&amp; !Crutch)
        {
            if (!ServiceLocator.Current.GetInstance&lt;MultiViewModel&gt;().EightBoxesCommandIsEnabled)
            {
                ChangeToSmall(3, 2);
            }
            Crutch = true;
        }

        if (input.NewSize.Width &gt; 450 &amp;&amp; Crutch)
        {
            if (!ServiceLocator.Current.GetInstance&lt;MultiViewModel&gt;().EightBoxesCommandIsEnabled)
            {
                ChangeToBig(3, 2);
            }
            Crutch = false;
        }

        if (input.NewSize.Width &gt; 550 &amp;&amp; !Crutch)
        {
            if (!ServiceLocator.Current.GetInstance&lt;MultiViewModel&gt;().EightBoxesCommandIsEnabled)
            {
                ChangeToBig(4, 2);
            }
        }
    }
If ServiceLocator.Current.GetInstance&lt;MultiViewModel&gt;().EightBoxesCommandIsEnabled evaluates to true you never do anything; so hoist it out of the if statements and do an early return:

public void Resize(SizeChangedEventArgs input)

    if(ServiceLocator.Current.GetInstance&lt;MultiViewModel&gt;().EightBoxesCommandIsEnabled) 
        return;

    if (input.NewSize.Width &lt; 450 &amp;&amp; Crutch)
    {
        ChangeToSmall(2, 2);
    }
    //...
}


You can name crutch into something better that describes what it represents. Or keep whether ChangeToSmall or ChangeToBig was called last and replace crutch with that property.

void ChangeToBig(int, int){
    lastChangeCalledBig = true;

    //...
}

void ChangeToSmall(int, int){
    lastChangeCalledBig = false;

    //...
}