动态更改后将实际高度和宽度返回到 wpf 矩形

returning actual Height and Width to wpf rectangle after dynamic change

我有一个主 window 应用程序,其中包含一个矩形和一个按钮,该按钮指向另一个 window,用户可以在其中输入信息。输入信息后,用户单击一个按钮,然后 return 将他转到主 window 并相应地更改大小。我想要实现的是,如果用户再次按下主 window 中的按钮,return 矩形的 ActualHeight 和 ActualWidth,有点刷新矩形。 所有代码都在 Main Window 按钮单击事件中。如果您需要有关代码的任何具体信息,我很乐意提供给您。

private void buttonStart_Click(object sender, RoutedEventArgs e)
    {
        Questionnaire q = new Questionnaire();
        q.ShowDialog();

var size = q.textBoxNumberOfEmployees.Text;

        if (int.Parse(size) > 5 && int.Parse(size) < 15)
        {
            Rect1.Height = Rect1.ActualHeight - 10;
            Rect1.Width = Rect1.ActualWidth - 5;
        }

        else if (int.Parse(size) > 15 && int.Parse(size) < 30)
        {
            Rect1.Height = Rect1.ActualHeight - 15;
            Rect1.Width = Rect1.ActualWidth - 10;
        }
        else if (int.Parse(size) > 30 && int.Parse(size) < 100)
        {
            Rect1.Height = Rect1.ActualHeight - 30;
            Rect1.Width = Rect1.ActualWidth - 15;
        }
        else
        {
            Rect1.Height = Rect1.ActualHeight;
            Rect1.Width = Rect1.ActualWidth;
        }

您可以将矩形的原始高度和宽度存储在表单加载的变量中。使用这些变量使矩形变为原始大小,然后在单击按钮时打开新的 window。 以下代码位于表单的顶部。

私有 int rect1width; private int rect1height;

在你的form__load中你把这个写在最后。

rect1width = Rect1.ActualWidth; rect1height = Rect1.ActualHeight;

在您的按钮点击代码中,以下代码位于顶部。

Rect1.Width = rect1width; Rect1.Height = rect1height;

下面是一段看似很长的代码,但它使用了MVC类型的设计模式,并与状态模式相结合。使它成为真正的 MVC 的唯一真正缺少的是观察者和将订阅问卷的可观察接口。

public interface RectangleState
    {
        int myHeight { get; set; }
        int myWidth { get; set; }
    }
    public class RectangleModel
    {
        private static Rectangle Rect1;
        public RectangleModel(Rectangle rect1 )
        {
            Rect1 = rect1;
        }        
        private RectangleState state;
        public RectangleState State
        {
            get
            {
                return state;
            }
            set
            {
                state = value;
                ModifyState(value.myHeight, value.myWidth);
            }
        }
        private void ModifyState(int Height, int Width)
        {
            Rect1.Height = Height;
            Rect1.Width = Width;
        }
    }
    public class SmallState : RectangleState
    {
        public int myHeight { get; set; } = 20;
        public int myWidth { get; set; } = 80;
    }
    public class MediumState : RectangleState
    {
        public int myHeight { get; set; } = 25;
        public int myWidth { get; set; } = 90;
    }
    public class LargeState : RectangleState
    {
        public int myHeight { get; set; } = 35;
        public int myWidth { get; set; } = 120;
    }
    public class NormalState : RectangleState
    {
        public int myHeight { get; set; } = 30;
        public int myWidth { get; set; } = 100;
    }

现在您需要做的就是插入条件:

RectangleModel RM = new RectangleModel(myRectangle); // store this in your class as property;
            int size = 0;
            int.TryParse(q.textBoxNumberOfEmployees.Text, out size);
            if (size > 5 && size < 15)
            {
                RM.State = new SmallState();                
            }

            else if (size > 15 && size < 30)
            {
                RM.State = new MediumState();
            }
            else if (size > 30 && size < 100)
            {
                RM.State = new LargeState();
            }
            else
            {
                RM.State = new NormalState();
            }

如果以后您决定要更改其中任何一个的默认值,您可以更改它们。如果您想添加新的矩形形状或尺寸,您可以添加它。如果你想创建一个适配器来进一步修改矩形,你可以这样做。这是一个很好的模式。我知道答案看起来有些过头了,但我认为您会发现它工作可靠,并且在插入访问问卷的代码时非常灵活。