WPF窗口最小化/最大化行为不一致

时间:2012-11-01 04:11:10

标签: c# wpf

我第一次涉足WPF,并决定创建一个在系统托盘中运行的基本应用程序。我添加了一个winforms NotifyIcon,并且能够最小化到托盘并隐藏窗口,以便一切正常。

这是事情变得奇怪的地方。

我决定始终从任务栏隐藏应用程序,并始终在系统托盘中显示notifyicon。我添加了单击事件处理程序,以便在窗口启动时单击notifyicon将导致它隐藏,然后在它关闭时单击将导致它显示,非常标准的东西。

最后,窗口开始最小化到托盘。

所以,我启动我的应用程序,我所拥有的只是一个系统托盘图标。我点击它,窗口显示你所期望的。我再次点击通知图标,窗口消失了,就像你怀疑的那样。我第三次点击它,而不是我的窗口弹出,我得到左下角的标题栏(左上角的图标,右上角的最小化/关闭按钮等)。我相信这是“崩溃”的行为。让这个奇怪的最后一件事是我正在使用WindowLayout = none所以我的窗口甚至没有标题栏......然而一个显示在左下角。

如果我第四次点击,则该栏会消失。等等。

所以隐藏/显示是第一次工作,然后它变得奇怪。

真的在这个问题上摸不着头脑。有人看过这样的东西或有什么建议吗?

https://stackoverflow.com/questions/12088892/impossible-to-restore-application-hidden-programmatically 这个家伙几乎完全解释了我所看到的行为,但不幸的是他没有回答他的问题。

以下是 XAML

    <Window x:Class="Tagalong.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Tagalong Beta .1" Height="350" Width="500" Icon="content/tagalong_icon.ico"     
    ResizeMode="CanMinimize" Topmost="True"
    WindowStyle="None" Background="Transparent" AllowsTransparency="True" ShowInTaskbar="false" >
    <Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="250"  />
        <ColumnDefinition Width="250" />
    </Grid.ColumnDefinitions>
    <Border Name="LeftPane" Grid.Row="0" Grid.Column="0" BorderBrush="Black"
    BorderThickness="1.5" Height="350" Width="250" CornerRadius="10"  Background="Blue" >
        <Grid>
        </Grid>
    </Border>
    <Border Name="RightPane" BorderBrush="Black" Grid.Row="0" Grid.Column="1"  
    BorderThickness="1.5" Height="350" Width="250" CornerRadius="10" Background="Green">
        <Grid>
        </Grid>
    </Border>
    </Grid>
    </Window>

以下是代码

    void InitializeSystemTrayOptions()
    {
        notifyIcon = new NotifyIcon();
        notifyIcon.Icon = new System.Drawing.Icon(@"C:\dev\desktop\Tagalong\Tagalong\tagalong_icon.ico");
        notifyIcon.MouseClick += new System.Windows.Forms.MouseEventHandler(notifyIcon_MouseClick);            
        notifyIcon.Visible = true;
        this.Visibility = Visibility.Hidden; 
        this.WindowState = WindowState.Minimized;
    }

    void notifyIcon_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e)
    {
        if (e.Button == MouseButtons.Left)
        {
            if (this.WindowState == WindowState.Normal)
            {
                this.WindowState = WindowState.Minimized;
                this.Visibility = Visibility.Hidden;
            }
            else if (this.WindowState == WindowState.Minimized)
            {
                this.WindowState = WindowState.Normal;
                this.Visibility = Visibility.Visible;
            }
        }
    }

    private NotifyIcon notifyIcon;

0 个答案:

没有答案