I need to enable the following on my application (C# WPF application):
- Have normal size of 1024*768
- The user can maximize the application
- The user can minimize t开发者_如何学Pythonhe application
- The user can restore the application (1024*768)
- The user cannot manually resize the application by draging its border.
There isn't any ResizeMode
the fulfills all of those requirements. Is there any way to do do?
I've finally found a relatively decent solution.
The idea is to overide the OnStateChanged
event of the window, cancel the Min/Max constraints and refresh it.
If the window is not maximized, we simply apply back the Min/Max constraints
protected override void OnStateChanged(EventArgs e)
{
if (WindowState == WindowState.Maximized)
{
MinWidth = 0;
MinHeight = 0;
MaxWidth = int.MaxValue;
MaxHeight = int.MaxValue;
if (!m_isDuringMaximizing)
{
m_isDuringMaximizing = true;
WindowState = WindowState.Normal;
WindowState = WindowState.Maximized;
m_isDuringMaximizing = false;
}
}
else if (!m_isDuringMaximizing)
{
MinWidth = 1024;
MinHeight = 768;
MaxWidth = 1024;
MaxHeight = 768;
}
base.OnStateChanged(e);
}
You can listen to the Window.SizeChanged event, and inside your handler manually set Width and Height back to 1027 and 768. It still allows the user to drag the window's edges to resize, but then the window returns to it's set size. The drawback of this is that the window has a "seizure" whenever the user tries resizing--not the prettiest thing to see. Minimize and Maximize work as normal.
精彩评论