如何将wpf窗体最小化
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将wpf窗体最小化相关的知识,希望对你有一定的参考价值。
public static void FullOrMin(this Window window)//如果是全屏,则最小化
if (window.WindowState == WindowState.Maximized)
window.Topmost = false;
window.WindowState = WindowState.Normal;
window.WindowStyle = WindowStyle.SingleBorderWindow;
window.ResizeMode = ResizeMode.CanResizeWithGrip;//设置为可调整窗体大小
window.Width = 800;
window.Height = 600;
//获取窗口句柄
var handle = new WindowInteropHelper(window).Handle;
//获取当前显示器屏幕
Screen screen = Screen.FromHandle(handle);
window.Left = (screen.Bounds.Width - window.Width) / 2;
window.Top = (screen.Bounds.Height - window.Height) / 2;
window.WindowState = WindowState.Minimized;
return;
参考技术A Alt+Tab 参考技术B private void Button_Click(object sender, RoutedEventArgs e)
this.WindowState = WindowState.Minimized;
本回答被提问者采纳
WPF最小化窗体后激活函数显示不了窗体
WPF最小化窗体后激活函数显示不了窗体
今天测试小哥给我提了一些问题,其中一个问题是这样的,点击web端的一个链接,是能启动本地的一个应用程序的,如果本地应用程序已启动(通过tcp进程间通信),那么应该要能显示这个本地应用窗口。但是他测试的时候发现并没有预期的效果。
经过多次测试后,发现无效的情况是在窗体设置为最小化的时候,激活显示不了窗体,如果这个窗体只是在其它窗体后面是可以激活的。
测试代码如下:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.WindowState = WindowState.Maximized;
this.SleepShow();
}
public void SleepShow(double sleep = 5)
{
DispatcherTimer dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Interval = TimeSpan.FromSeconds(sleep);
dispatcherTimer.Tick += (sender, e) => {
this.Activate();
Console.WriteLine("激活显示窗体");
};
dispatcherTimer.Start();
}
}
在当前窗体不是最小化状态下都是有效的,最小化就是不能使用。
加入Topmost = true;也没用。最后的解决方法是,需要先将窗体的WindowState还原为原来的状态,肯定是非Minimized状态的。处理代码如下:
public partial class MainWindow : Window
{
private WindowState windowState;
public MainWindow()
{
InitializeComponent();
this.WindowState = WindowState.Maximized;
this.StateChanged += MainWindow_StateChanged;
this.SleepShow();
this.windowState = WindowState.Maximized;
}
private void MainWindow_StateChanged(object sender, EventArgs e)
{
if(this.WindowState == WindowState.Minimized)
{
}
else
{
this.windowState = this.WindowState;//保存非最小化的状态
}
}
public void SleepShow(double sleep = 5)
{
DispatcherTimer dispatcherTimer = new DispatcherTimer();
dispatcherTimer.Interval = TimeSpan.FromSeconds(sleep);
dispatcherTimer.Tick += (sender, e) => {
if(this.WindowState == WindowState.Minimized)//判断当前如果是最小化状态,那么就需要还原,再激活
{
this.WindowState = this.windowState;//还原状态
}
this.Activate();
Console.WriteLine("激活显示窗体");
};
dispatcherTimer.Start();
}
}
还有一个问题就是在调节窗体大小时,获取窗体中的TabControl的ActualHeight和ActualWidth的值总是不变,另外开一个应用程序去测试获取的时候,结果值又是正确的,一脸懵逼。最后往上查找节点最终发现是因为Viewbox控件导致的-V-。最后调整了ViewBox的使用位置,问题解决,自测几遍后,打包发给测试,验证通过。
以上是关于如何将wpf窗体最小化的主要内容,如果未能解决你的问题,请参考以下文章