在动态变化后将实际高度和宽度返回到wpf矩形

时间:2017-01-08 04:23:03

标签: c# wpf height width rectangles

我有一个主窗口的应用程序,其中包含一个矩形和一个按钮,该按钮指向用户输入信息的另一个窗口。输入信息后,用户点击一个按钮,然后将其返回主窗口并相应地更改大小。我想要实现的是,如果用户再次按下主窗口中的按钮,则将ActualHeight和ActualWidth返回到矩形,类似于刷新矩形。 所有代码都在主窗口按钮单击事件中。如果您需要有关代码的任何特定信息,我很乐意将其提供给您。

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;
        }

2 个答案:

答案 0 :(得分:1)

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

private int rect1width; private int rect1height;

在你的form__load中,你最后写下这个。

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

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

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

答案 1 :(得分:-1)

这是一些看似很长的代码,但它使用了MVC类型的设计模式和具有状态模式的复合。使真正的MVC真正缺少的唯一东西是Observers和可观察的接口,它们会订阅调查问卷。

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();
            }

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