动态更改后将实际高度和宽度返回到 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();
}
如果以后您决定要更改其中任何一个的默认值,您可以更改它们。如果您想添加新的矩形形状或尺寸,您可以添加它。如果你想创建一个适配器来进一步修改矩形,你可以这样做。这是一个很好的模式。我知道答案看起来有些过头了,但我认为您会发现它工作可靠,并且在插入访问问卷的代码时非常灵活。
我有一个主 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();
}
如果以后您决定要更改其中任何一个的默认值,您可以更改它们。如果您想添加新的矩形形状或尺寸,您可以添加它。如果你想创建一个适配器来进一步修改矩形,你可以这样做。这是一个很好的模式。我知道答案看起来有些过头了,但我认为您会发现它工作可靠,并且在插入访问问卷的代码时非常灵活。