标签: windowstate

如何使用鼠标光标在屏幕上最大化WPF窗口?

根据WindowStartupLocation属性的MSDN文档:

设置CenterScreen会使窗口位于包含鼠标光标的屏幕中央.

虽然CenterScreen字段的MSDN文档本身定义得不那么明确:

窗口的启动位置是打开它的屏幕的中心.

一个简单的测试显示这应该工作:

MainWindow.xaml

<Window x:Class="CenterScreenTest.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <Button Click="button_Click">Open Window</Button>
</Window>
Run Code Online (Sandbox Code Playgroud)

MainWindow.xaml.cs

using System.Windows;

namespace CenterScreenTest
{
    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        void button_Click(object sender, RoutedEventArgs e)
        {
            Window window = new Window();
            window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
            window.Show();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果在双监视器系统上测试它,您可以看到当您单击按钮时,新窗口将位于鼠标光标所在的屏幕上.这正是它应该如何运作的.

但是,如果在显示窗口之前尝试将窗口设置为最大化,则新窗口将仅在启动应用程序的显示器上最大化.将button_Click事件处理程序更改为以下内容以查看我的意思:

void button_Click(object sender, RoutedEventArgs e)
{
    Window window = new Window();
    window.WindowStartupLocation = WindowStartupLocation.CenterScreen;
    window.WindowState = WindowState.Maximized;
    window.Show();
}
Run Code Online (Sandbox Code Playgroud)

现在,无论单击按钮时鼠标光标在哪里,窗口都只会在启动应用程序的屏幕上最大化.如果在显示窗口状态后将其设置为最大化,则CenterScreen可正常工作.这相当于用户最大化窗口.例如: …

.net wpf multiple-monitors maximize windowstate

44
推荐指数
4
解决办法
6万
查看次数

WPF:使用WindowState问题最大化窗口(应用程序将隐藏窗口任务栏)

我已将主窗口状态设置为"最大化",但问题是我的应用程序将填满整个屏幕甚至任务栏.我究竟做错了什么 ?我正在使用分辨率为1600*900的Windows 2008 R2

这是Xaml:

<Window x:Class="RadinFarazJamAutomationSystem.wndMain"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    xmlns:local="clr-namespace:RadinFarazJamAutomationSystem"
     xmlns:mwt="clr-namespace:Microsoft.Windows.Themes;assembly=PresentationFramework.Aero"
    Title="MyName"  FontFamily="Tahoma" FontSize="12" Name="mainWindow"  WindowState="Maximized"   xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation"
    xmlns:my="clr-namespace:RadinFarazJamAutomationSystem.Calendare.UC" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  Loaded="mainWindow_Loaded" FlowDirection="LeftToRight"
    ResizeMode="NoResize" Closed="mainWindow_Closed">
Run Code Online (Sandbox Code Playgroud)

wpf window windowstate

17
推荐指数
4
解决办法
2万
查看次数

每当WindowState在C#中发生变化时,如何触发某些内容?

所以我想立即,因为程序的这部分依赖于速度,当我的主窗体中的windowstate被更改时触发一个函数.我需要它是这样的:

private void goButton_Click(object sender, EventArgs e)
{
   //Code
}
Run Code Online (Sandbox Code Playgroud)

我检查了表单的事件选项卡,我没有WindowStateChanged等.我该怎么做?

表单将重新调整大小,因此检查大小更改时将无效.

c# windowstate

13
推荐指数
2
解决办法
1万
查看次数

WPF:即使明确设置WindowState,窗口也会保持最小化

我的应用程序有一个托盘图标,双击时会隐藏或显示应用程序窗口.我的问题是,如果隐藏窗口处于最小化状态,我似乎无法将窗口置于前台.

例如,假设用户最小化应用程序,然后双击托盘图标.然后隐藏应用程序窗口并从任务栏中消失.当用户再次双击托盘图标时,应该出现应用程序窗口,即应该从最小化状态恢复并将其带到前台.

下面的代码应该这样做,但由于某种原因,它不会:

private void TrayIcon_DoubleClick(object sender, EventArgs e)
{
    if (this.Visibility == Visibility.Hidden)
    {
        this.Visibility = Visibility.Visible;
        this.WindowState = WindowState.Normal;
        this.Activate();
    }
    ...
}
Run Code Online (Sandbox Code Playgroud)

应用程序保持最小化,不会被带到前台.Activate()返回true,后续调用TrayIcon_DoubleClick()表示状态确实设置为Normal.

wpf restore windowstate minimized

9
推荐指数
1
解决办法
7627
查看次数

使用MVVM绑定WPF中窗口的"WindowState"属性

我将主窗口的"WindowState"属性绑定到我的ViewModel,以便通过命令更改窗口的状态,但是第一次最小化窗口时,它最小化,就像Excel文件中的工作表一样.是否有解决此问题或将"WindowState"属性绑定到我的ViewModel的正确方法,以便窗口最小化?

wpf minimize mvvm windowstate

8
推荐指数
2
解决办法
1万
查看次数

将WindowState设置为Maximized会导致窗口显示得太早

我读到Load事件应该在创建窗口句柄之后但窗口实际可见之前被触发.在大多数情况下,这似乎是真的.但是,我发现当我创建一个WindowState属性设置为FormWindowState.Maximized(通过VS设计器,或在构造函数中以编程方式设置)的窗体时,窗口在Load事件触发之前变得可见.例如:

using System;
using System.Windows.Forms;

namespace MyApplication
{
    public partial class MyForm : Form
    {
        public MyForm()
        {
            InitializeComponent();
            WindowState = FormWindowState.Maximized;
        }

        protected override void OnLoad(EventArgs e)
        {
            MessageBox.Show("OnLoad - notice that the window is already visible"); 
            base.OnLoad(e);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这反过来导致显示的形式闪烁很多,Form.Load同时在窗口可见时调整其控件(在事件期间布局)的大小.如果我没有将状态设置为最大化,则在显示窗口之前完成所有调整大小(这是我预期的).

我可以推迟设置WindowState直到Load事件结束,但仍然会导致大量闪烁,因为窗口变得可见,然后所有控件都会调整大小.

有什么想法吗?

.net c# resize windowstate winforms

7
推荐指数
1
解决办法
9347
查看次数

记住窗口位置,大小和状态[在Win +箭头对齐上](带多个显示器)

在我们的项目中,我们保存了窗口大小,位置和最小化/最大化设置,因此我们可以在重新打开窗口时以完全相同的点和大小打开窗口.所有这一切都运行得很好,使用Window-Behavior本文底部的-class.

但问题是,当我们使用Win-button +箭头时; 这会将屏幕与屏幕一侧对齐,但这并未正确保存在行为中.相反,它在我使用Win +箭头对齐之前保存了屏幕的位置和大小,这就是它再次打开的位置.

我试图使用Window的Left,Top,ActualWidthActualHeightSaveWindowState-方法(注:AssociatedObject在这个方法中的窗口.)但是,LeftTop似乎由约20-40像素被关闭,并保存右键和左键使用的ActualWidth,ActualHeight和当前的屏幕宽度/高度(使用多个显示器时)也有点痛苦.

那么,当用户使用Win +箭头对齐Window然后关闭它时,有没有办法在窗口设置中保存正确的位置和大小?

WindowSettingsBehavior:

using System;
using System.ComponentModel;
using System.Configuration;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows;
using System.Windows.Interactivity;
using System.Windows.Interop;

namespace NatWa.MidOffice.Behaviors
{
    /// <summary>
    /// Persists a Window's Size, Location and WindowState to UserScopeSettings 
    /// </summary>
    public class WindowSettingsBehavior : Behavior<Window>
    {
        [DllImport("user32.dll")]
        static extern bool SetWindowPlacement(IntPtr hWnd, [In] ref Windowplacement …
Run Code Online (Sandbox Code Playgroud)

c# wpf window application-settings windowstate

7
推荐指数
1
解决办法
935
查看次数

在触发器中检查窗口的"WindowState"的值

在WPF中,有没有办法检查触发器中窗口的"WindowState"属性?我尝试使用"0","最小化"和"WindowState.Minimized"的值.

例:

<Window.Triggers>
    <Trigger Property="WindowState" Value="Minimized">
        <Setter Property="ShowInTaskBar" Value="False" />
    </Trigger>
</Window.Triggers>
Run Code Online (Sandbox Code Playgroud)

c# wpf triggers windowstate

5
推荐指数
2
解决办法
4588
查看次数

从"系统托盘"图标打开一个窗口

所以我创建了一个带有系统托盘图标的窗口.窗口开始最小化,并在单击系统托盘图标时重新显示.但是,它仅在您单击最小化按钮时有效.如果单击红色退出按钮,窗口将消失,系统托盘图标将保留(应该如此),但是当您单击它时,程序将抛出错误.

窗口关闭后,无法设置可见性或调用Show,ShowDialog或WindowInteropHelper.EnsureHandle.

这是相关的代码

public partial class MainWindow : Window
{
    public static NotifyIcon icon;

    List<string> food = new List<string>();
    bool on = false;

    public MainWindow()
    {
        InitializeComponent();

        food.Add("Breakfast");
        food.Add("Soups");
        food.Add("Vegetables");
        food.Add("Crab roll");
        food.Add("Sushi");
        food.Add("Egg rolls");
        food.Add("Salad");


        MainWindow.icon = new NotifyIcon();

        window1.WindowState = WindowState.Minimized; 

        icon.Icon = new System.Drawing.Icon("favicon.ico");
        icon.Visible = true;

        icon.Click += new EventHandler(icon_Click);
        icon.BalloonTipClicked += new EventHandler(icon_BalloonTipClicked);
        icon.DoubleClick += new EventHandler(icon_DoubleClick);
        icon.BalloonTipClosed += new EventHandler(icon_BalloonTipClosed);
        icon.MouseMove += new System.Windows.Forms.MouseEventHandler(icon_MouseMove);
        StateChanged += new EventHandler(MainWindow_StateChanged);

    }

    void icon_BalloonTipClicked(object sender, EventArgs e) …
Run Code Online (Sandbox Code Playgroud)

c# wpf icons windowstate

5
推荐指数
1
解决办法
2833
查看次数

如何在不同的线程上更改Form的窗口状态?

有谁知道如何从另一个线程更改窗体的窗口状态?这是我正在使用的代码:

    private void button4_Click(object sender, EventArgs e)
    {
            string pathe = label1.Text;
            string name = Path.GetFileName(pathe);
            pathe = pathe.Replace(name, "");
            string runpath = label2.Text;
            Process process;
            process = new Process();

            process.EnableRaisingEvents = true;
            process.Exited += new System.EventHandler(process_Exited);

            process.StartInfo.FileName = @runpath;
            process.StartInfo.WorkingDirectory = @pathe;
            process.Start();
            WindowState = FormWindowState.Minimized;
    }
    private void process_Exited(object sender, EventArgs e)
    {
        this.WindowState = FormWindowState.Normal;
    }
Run Code Online (Sandbox Code Playgroud)

这意味着运行程序并最小化,然后在程序关闭后返回正常状态.虽然我收到此错误"跨线程操作无效:控件'Form1'从其创建的线程以外的线程访问." 知道如何让这个工作吗?

c# process windowstate winforms

2
推荐指数
1
解决办法
2万
查看次数

C#Will"WindowState.ToString"会在不同文化之间发生变化

以下面的代码为例;

    if (Convert.ToString(frm.WindowState) == "Minimized")
        Layout.WindowState = "Maximized";
    else
        Layout.WindowState = Convert.ToString(frm.WindowState);
Run Code Online (Sandbox Code Playgroud)

我们正在分析窗口状态的字符串定义,即"最小化".

这种字符串描述会在文化之间发生变

最后,在这段代码中,是否有一个Enum我们可以使用它来检查窗口状态?

我们可以重构这段代码吗?

c# windowstate

1
推荐指数
1
解决办法
889
查看次数

Windows MDI子窗体在WIndowMaximized状态下不会打开

我已将表单设置为MDI表单的子表单,其窗口状态设置为最大化.

当我从MDI容器中打开该表单时,它不会以最大化状态打开.为什么会发生这种情况?如何才能使其最大化?

这就是我从mdi容器中显示子表单的方式.

private void ShowNewForm(object sender, EventArgs e)
{
    FormChild childForm = new FormChild ();
    childForm.MdiParent = this;
    childForm.WindowState = FormWindowState.Maximized;
    childForm.Text = "Window " + childFormNumber++;
    childForm.Show();
}
Run Code Online (Sandbox Code Playgroud)

c# mdichild windowstate

0
推荐指数
2
解决办法
2万
查看次数